|
1 | 1 | /* |
2 | | - * Copyright (C) 2018-2023 Intel Corporation |
| 2 | + * Copyright (C) 2018-2024 Intel Corporation |
3 | 3 | * |
4 | 4 | * SPDX-License-Identifier: MIT |
5 | 5 | * |
|
11 | 11 | #include "shared/source/command_stream/preemption_mode.h" |
12 | 12 | #include "shared/source/device/device.h" |
13 | 13 | #include "shared/source/execution_environment/execution_environment.h" |
| 14 | +#include "shared/source/helpers/compiler_product_helper.h" |
14 | 15 | #include "shared/source/helpers/gfx_core_helper.h" |
15 | 16 | #include "shared/source/helpers/pipe_control_args.h" |
16 | 17 | #include "shared/source/helpers/preamble.h" |
@@ -43,19 +44,28 @@ void PreemptionHelper::programStateSip(LinearStream &preambleCmdStream, Device & |
43 | 44 | bool debuggingEnabled = device.getDebugger() != nullptr; |
44 | 45 | bool isMidThreadPreemption = device.getPreemptionMode() == PreemptionMode::MidThread; |
45 | 46 |
|
| 47 | + auto &compilerProductHelper = device.getCompilerProductHelper(); |
| 48 | + bool useFullAddress = compilerProductHelper.isHeaplessModeEnabled(); |
| 49 | + |
46 | 50 | if (isMidThreadPreemption || debuggingEnabled) { |
47 | 51 | GraphicsAllocation *sipAllocation = SipKernel::getSipKernel(device, context).getSipAllocation(); |
48 | | - programStateSipCmd<GfxFamily>(preambleCmdStream, sipAllocation); |
| 52 | + programStateSipCmd<GfxFamily>(preambleCmdStream, sipAllocation, useFullAddress); |
49 | 53 | } |
50 | 54 | } |
51 | 55 |
|
52 | 56 | template <typename GfxFamily> |
53 | | -void PreemptionHelper::programStateSipCmd(LinearStream &preambleCmdStream, GraphicsAllocation *sipAllocation) { |
| 57 | +void PreemptionHelper::programStateSipCmd(LinearStream &preambleCmdStream, GraphicsAllocation *sipAllocation, bool useFullAddress) { |
54 | 58 | using STATE_SIP = typename GfxFamily::STATE_SIP; |
55 | 59 |
|
56 | 60 | auto sip = reinterpret_cast<STATE_SIP *>(preambleCmdStream.getSpace(sizeof(STATE_SIP))); |
57 | 61 | STATE_SIP cmd = GfxFamily::cmdInitStateSip; |
58 | | - cmd.setSystemInstructionPointer(sipAllocation->getGpuAddressToPatch()); |
| 62 | + if (useFullAddress) { |
| 63 | + cmd.setSystemInstructionPointer(sipAllocation->getGpuAddress()); |
| 64 | + |
| 65 | + } else { |
| 66 | + cmd.setSystemInstructionPointer(sipAllocation->getGpuAddressToPatch()); |
| 67 | + } |
| 68 | + |
59 | 69 | *sip = cmd; |
60 | 70 | } |
61 | 71 |
|
|
0 commit comments