diff --git a/level_zero/core/source/cmdlist/cmdlist_hw.h b/level_zero/core/source/cmdlist/cmdlist_hw.h index 52dae8f537..7559dac719 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw.h +++ b/level_zero/core/source/cmdlist/cmdlist_hw.h @@ -104,8 +104,8 @@ struct CommandListCoreFamily : CommandListImp { ze_result_t appendMemoryCopy(void *dstptr, const void *srcptr, size_t size, ze_event_handle_t hSignalEvent, uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents) override; - ze_result_t appendPageFaultCopy(NEO::GraphicsAllocation *dstptr, - NEO::GraphicsAllocation *srcptr, + ze_result_t appendPageFaultCopy(NEO::GraphicsAllocation *dstAllocation, + NEO::GraphicsAllocation *srcAllocation, size_t size, bool flushHost) override; ze_result_t appendMemoryCopyRegion(void *dstPtr, diff --git a/level_zero/core/source/cmdlist/cmdlist_hw.inl b/level_zero/core/source/cmdlist/cmdlist_hw.inl index 8f738eac68..e59bab7989 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw.inl @@ -958,8 +958,8 @@ ze_result_t CommandListCoreFamily::appendCopyImageBlit(NEO::Graph } template -ze_result_t CommandListCoreFamily::appendPageFaultCopy(NEO::GraphicsAllocation *dstptr, - NEO::GraphicsAllocation *srcptr, +ze_result_t CommandListCoreFamily::appendPageFaultCopy(NEO::GraphicsAllocation *dstAllocation, + NEO::GraphicsAllocation *srcAllocation, size_t size, bool flushHost) { using GfxFamily = typename NEO::GfxFamilyMapper::GfxFamily; @@ -972,32 +972,45 @@ ze_result_t CommandListCoreFamily::appendPageFaultCopy(NEO::Graph isStateless = true; } - uint64_t dstAddress = dstptr->getGpuAddress(); - uint64_t srcAddress = srcptr->getGpuAddress(); - ze_result_t ret = appendMemoryCopyKernelWithGA(reinterpret_cast(&dstAddress), - dstptr, 0, - reinterpret_cast(&srcAddress), - srcptr, 0, - size - rightSize, - middleElSize, - Builtin::CopyBufferToBufferMiddle, - nullptr, - isStateless); - if (ret == ZE_RESULT_SUCCESS && rightSize) { - appendMemoryCopyKernelWithGA(reinterpret_cast(&dstAddress), - dstptr, size - rightSize, - reinterpret_cast(&srcAddress), - srcptr, size - rightSize, - rightSize, 1UL, - Builtin::CopyBufferToBufferSide, - nullptr, - isStateless); - } + uintptr_t dstAddress = static_cast(dstAllocation->getGpuAddress()); + uintptr_t srcAddress = static_cast(srcAllocation->getGpuAddress()); + ze_result_t ret = ZE_RESULT_ERROR_UNKNOWN; + if (isCopyOnly()) { + ret = appendMemoryCopyBlit(dstAddress, dstAllocation, 0u, + srcAddress, srcAllocation, 0u, + size - rightSize); - if (NEO::MemorySynchronizationCommands::isDcFlushAllowed()) { - if (flushHost) { - NEO::PipeControlArgs args(true); - NEO::MemorySynchronizationCommands::addPipeControl(*commandContainer.getCommandStream(), args); + if (ret == ZE_RESULT_SUCCESS && rightSize) { + ret = appendMemoryCopyBlit(dstAddress, dstAllocation, size - rightSize, + srcAddress, srcAllocation, size - rightSize, + rightSize); + } + } else { + ret = appendMemoryCopyKernelWithGA(reinterpret_cast(&dstAddress), + dstAllocation, 0, + reinterpret_cast(&srcAddress), + srcAllocation, 0, + size - rightSize, + middleElSize, + Builtin::CopyBufferToBufferMiddle, + nullptr, + isStateless); + if (ret == ZE_RESULT_SUCCESS && rightSize) { + ret = appendMemoryCopyKernelWithGA(reinterpret_cast(&dstAddress), + dstAllocation, size - rightSize, + reinterpret_cast(&srcAddress), + srcAllocation, size - rightSize, + rightSize, 1UL, + Builtin::CopyBufferToBufferSide, + nullptr, + isStateless); + } + + if (NEO::MemorySynchronizationCommands::isDcFlushAllowed()) { + if (flushHost) { + NEO::PipeControlArgs args(true); + NEO::MemorySynchronizationCommands::addPipeControl(*commandContainer.getCommandStream(), args); + } } } diff --git a/level_zero/core/source/cmdlist/cmdlist_hw_immediate.h b/level_zero/core/source/cmdlist/cmdlist_hw_immediate.h index 9ebd8ee0e1..b561664713 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw_immediate.h +++ b/level_zero/core/source/cmdlist/cmdlist_hw_immediate.h @@ -65,7 +65,8 @@ struct CommandListCoreFamilyImmediate : public CommandListCoreFamily::appendEventReset(ze_e } template -ze_result_t CommandListCoreFamilyImmediate::appendPageFaultCopy(NEO::GraphicsAllocation *dstptr, NEO::GraphicsAllocation *srcptr, size_t size, bool flushHost) { +ze_result_t CommandListCoreFamilyImmediate::appendPageFaultCopy(NEO::GraphicsAllocation *dstAllocation, + NEO::GraphicsAllocation *srcAllocation, + size_t size, bool flushHost) { if (this->isFlushTaskSubmissionEnabled) { checkAvailableSpace(); } - auto ret = CommandListCoreFamily::appendPageFaultCopy(dstptr, srcptr, size, flushHost); + auto ret = CommandListCoreFamily::appendPageFaultCopy(dstAllocation, srcAllocation, size, flushHost); if (ret == ZE_RESULT_SUCCESS) { if (this->isFlushTaskSubmissionEnabled) { executeCommandListImmediateWithFlushTask(false); diff --git a/level_zero/core/source/cmdlist/cmdlist_imp.cpp b/level_zero/core/source/cmdlist/cmdlist_imp.cpp index 844c536f98..1c9023a1cb 100644 --- a/level_zero/core/source/cmdlist/cmdlist_imp.cpp +++ b/level_zero/core/source/cmdlist/cmdlist_imp.cpp @@ -103,7 +103,11 @@ CommandList *CommandList::createImmediate(uint32_t productFamily, Device *device NEO::CommandStreamReceiver *csr = nullptr; auto deviceImp = static_cast(device); if (internalUsage) { - csr = deviceImp->neoDevice->getInternalEngine().commandStreamReceiver; + if (NEO::EngineGroupType::Copy == engineGroupType && deviceImp->getActiveDevice()->getInternalCopyEngine()) { + csr = deviceImp->getActiveDevice()->getInternalCopyEngine()->commandStreamReceiver; + } else { + csr = deviceImp->getActiveDevice()->getInternalEngine().commandStreamReceiver; + } } else { device->getCsrForOrdinalAndIndex(&csr, desc->ordinal, desc->index); } diff --git a/level_zero/core/source/device/device_imp.cpp b/level_zero/core/source/device/device_imp.cpp index bdf1ffe43a..737f9ad6e9 100644 --- a/level_zero/core/source/device/device_imp.cpp +++ b/level_zero/core/source/device/device_imp.cpp @@ -768,7 +768,7 @@ Device *Device::create(DriverHandle *driverHandle, NEO::Device *neoDevice, uint3 ze_result_t resultValue = ZE_RESULT_SUCCESS; device->pageFaultCommandList = CommandList::createImmediate( - device->neoDevice->getHardwareInfo().platform.eProductFamily, device, &cmdQueueDesc, true, NEO::EngineGroupType::RenderCompute, resultValue); + device->neoDevice->getHardwareInfo().platform.eProductFamily, device, &cmdQueueDesc, true, NEO::EngineGroupType::Copy, resultValue); } if (device->getSourceLevelDebugger()) { diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_2.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_2.cpp index 16729d9305..5f1729743d 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_2.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_2.cpp @@ -22,6 +22,7 @@ template class MockCommandListHw : public WhiteBox<::L0::CommandListCoreFamily> { public: MockCommandListHw() : WhiteBox<::L0::CommandListCoreFamily>() {} + MockCommandListHw(bool failOnFirst) : WhiteBox<::L0::CommandListCoreFamily>(), failOnFirstCopy(failOnFirst) {} AlignedAllocationData getAlignedAllocation(L0::Device *device, const void *buffer, uint64_t bufferSize) override { return {0, 0, nullptr, true}; @@ -40,6 +41,10 @@ class MockCommandListHw : public WhiteBox<::L0::CommandListCoreFamily appendImageRegionCopySize = {0, 0, 0}; Vec3 appendImageRegionSrcOrigin = {9, 9, 9}; Vec3 appendImageRegionDstOrigin = {9, 9, 9}; + bool failOnFirstCopy = false; }; using Platforms = IsAtLeastProduct; @@ -178,6 +187,20 @@ HWTEST2_F(CommandListCreate, givenCommandListWhenPageFaultCopyCalledThenappendPa EXPECT_EQ(cmdList.appendMemoryCopyKernelWithGAStatelessCalledTimes, 0u); } +HWTEST2_F(CommandListCreate, givenCommandListWhenPageFaultCopyCalledWithCopyEngineThenappendPageFaultCopyWithappendMemoryCopyKernelWithGACalled, Platforms) { + MockCommandListHw cmdList; + size_t size = (sizeof(uint32_t) * 4); + cmdList.initialize(device, NEO::EngineGroupType::Copy, 0u); + NEO::MockGraphicsAllocation mockAllocationSrc(0, NEO::GraphicsAllocation::AllocationType::INTERNAL_HOST_MEMORY, + reinterpret_cast(0x1234), size, 0, sizeof(uint32_t), + MemoryPool::System4KBPages); + NEO::MockGraphicsAllocation mockAllocationDst(0, NEO::GraphicsAllocation::AllocationType::INTERNAL_HOST_MEMORY, + reinterpret_cast(0x2345), size, 0, sizeof(uint32_t), + MemoryPool::System4KBPages); + cmdList.appendPageFaultCopy(&mockAllocationDst, &mockAllocationSrc, size, false); + EXPECT_EQ(cmdList.appendMemoryCopyBlitCalledTimes, 1u); +} + HWTEST2_F(CommandListCreate, givenCommandListWhenPageFaultCopyCalledThenappendPageFaultCopyWithappendMemoryCopyKernelWithGACalledForMiddleAndRightSizesAreCalled, Platforms) { MockCommandListHw cmdList; size_t size = ((sizeof(uint32_t) * 4) + 1); @@ -193,6 +216,49 @@ HWTEST2_F(CommandListCreate, givenCommandListWhenPageFaultCopyCalledThenappendPa EXPECT_EQ(cmdList.appendMemoryCopyKernelWithGAStatelessCalledTimes, 0u); } +HWTEST2_F(CommandListCreate, givenCommandListWhenPageFaultCopyCalledAndErrorOnMidCopyThenappendPageFaultCopyWithappendMemoryCopyKernelWithGACalledForMiddleIsCalled, Platforms) { + MockCommandListHw cmdList(true); + size_t size = ((sizeof(uint32_t) * 4) + 1); + cmdList.initialize(device, NEO::EngineGroupType::RenderCompute, 0u); + NEO::MockGraphicsAllocation mockAllocationSrc(0, NEO::GraphicsAllocation::AllocationType::INTERNAL_HOST_MEMORY, + reinterpret_cast(0x1234), size, 0, sizeof(uint32_t), + MemoryPool::System4KBPages); + NEO::MockGraphicsAllocation mockAllocationDst(0, NEO::GraphicsAllocation::AllocationType::INTERNAL_HOST_MEMORY, + reinterpret_cast(0x2345), size, 0, sizeof(uint32_t), + MemoryPool::System4KBPages); + cmdList.appendPageFaultCopy(&mockAllocationDst, &mockAllocationSrc, size, false); + EXPECT_EQ(cmdList.appendMemoryCopyKernelWithGACalledTimes, 1u); + EXPECT_EQ(cmdList.appendMemoryCopyKernelWithGAStatelessCalledTimes, 0u); +} + +HWTEST2_F(CommandListCreate, givenCommandListWhenPageFaultCopyCalledWithCopyEngineThenappendPageFaultCopyWithappendMemoryCopyKernelWithGACalledForMiddleAndRightSizesAreCalled, Platforms) { + MockCommandListHw cmdList; + size_t size = ((sizeof(uint32_t) * 4) + 1); + cmdList.initialize(device, NEO::EngineGroupType::Copy, 0u); + NEO::MockGraphicsAllocation mockAllocationSrc(0, NEO::GraphicsAllocation::AllocationType::INTERNAL_HOST_MEMORY, + reinterpret_cast(0x1234), size, 0, sizeof(uint32_t), + MemoryPool::System4KBPages); + NEO::MockGraphicsAllocation mockAllocationDst(0, NEO::GraphicsAllocation::AllocationType::INTERNAL_HOST_MEMORY, + reinterpret_cast(0x2345), size, 0, sizeof(uint32_t), + MemoryPool::System4KBPages); + cmdList.appendPageFaultCopy(&mockAllocationDst, &mockAllocationSrc, size, false); + EXPECT_EQ(cmdList.appendMemoryCopyBlitCalledTimes, 2u); +} + +HWTEST2_F(CommandListCreate, givenCommandListWhenPageFaultCopyCalledWithCopyEngineAndErrorOnMidOperationThenappendPageFaultCopyWithappendMemoryCopyKernelWithGACalledForMiddleIsCalled, Platforms) { + MockCommandListHw cmdList(true); + size_t size = ((sizeof(uint32_t) * 4) + 1); + cmdList.initialize(device, NEO::EngineGroupType::Copy, 0u); + NEO::MockGraphicsAllocation mockAllocationSrc(0, NEO::GraphicsAllocation::AllocationType::INTERNAL_HOST_MEMORY, + reinterpret_cast(0x1234), size, 0, sizeof(uint32_t), + MemoryPool::System4KBPages); + NEO::MockGraphicsAllocation mockAllocationDst(0, NEO::GraphicsAllocation::AllocationType::INTERNAL_HOST_MEMORY, + reinterpret_cast(0x2345), size, 0, sizeof(uint32_t), + MemoryPool::System4KBPages); + cmdList.appendPageFaultCopy(&mockAllocationDst, &mockAllocationSrc, size, false); + EXPECT_EQ(cmdList.appendMemoryCopyBlitCalledTimes, 1u); +} + HWTEST2_F(CommandListCreate, givenCommandListWhen4GBytePageFaultCopyCalledThenPageFaultCopyWithappendMemoryCopyKernelWithGAStatelessCalled, Platforms) { MockCommandListHw cmdList; size_t size = 0x100000000; diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_3.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_3.cpp index 3fd209026b..8fc49df3fd 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_3.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_3.cpp @@ -838,7 +838,11 @@ HWTEST2_F(CommandListCreate, givenImmediateCommandListWhenMemoryCopyRegionWithSi ASSERT_NE(nullptr, commandList0); CommandQueueImp *cmdQueue = reinterpret_cast(commandList0->cmdQImmediate); - EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + if (neoDevice->getInternalCopyEngine()) { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalCopyEngine()->commandStreamReceiver); + } else { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + } void *srcBuffer = reinterpret_cast(0x1234); void *dstBuffer = reinterpret_cast(0x2345); @@ -883,7 +887,11 @@ HWTEST2_F(CommandListCreate, givenImmediateCommandListWhenCopyRegionFromImageToI ASSERT_NE(nullptr, commandList0); CommandQueueImp *cmdQueue = reinterpret_cast(commandList0->cmdQImmediate); - EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + if (neoDevice->getInternalCopyEngine()) { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalCopyEngine()->commandStreamReceiver); + } else { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + } ze_image_desc_t desc = {}; desc.stype = ZE_STRUCTURE_TYPE_IMAGE_DESC; @@ -923,7 +931,11 @@ HWTEST2_F(CommandListCreate, givenImmediateCommandListWhenCopyRegionFromImageToI ASSERT_NE(nullptr, commandList0); CommandQueueImp *cmdQueue = reinterpret_cast(commandList0->cmdQImmediate); - EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + if (neoDevice->getInternalCopyEngine()) { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalCopyEngine()->commandStreamReceiver); + } else { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + } ze_image_desc_t desc = {}; desc.stype = ZE_STRUCTURE_TYPE_IMAGE_DESC; @@ -964,7 +976,11 @@ HWTEST2_F(CommandListCreate, givenImmediateCommandListWhenCopyFromImageToImageUs ASSERT_NE(nullptr, commandList0); CommandQueueImp *cmdQueue = reinterpret_cast(commandList0->cmdQImmediate); - EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + if (neoDevice->getInternalCopyEngine()) { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalCopyEngine()->commandStreamReceiver); + } else { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + } ze_image_desc_t desc = {}; desc.stype = ZE_STRUCTURE_TYPE_IMAGE_DESC; @@ -1003,7 +1019,11 @@ HWTEST2_F(CommandListCreate, givenImmediateCommandListWhenMemoryCopyRegionWithSi ASSERT_NE(nullptr, commandList0); CommandQueueImp *cmdQueue = reinterpret_cast(commandList0->cmdQImmediate); - EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + if (neoDevice->getInternalCopyEngine()) { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalCopyEngine()->commandStreamReceiver); + } else { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + } void *srcBuffer = reinterpret_cast(0x1234); void *dstBuffer = reinterpret_cast(0x2345); diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_4.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_4.cpp index 0285ce4ee5..cc458b2357 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_4.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_4.cpp @@ -573,7 +573,11 @@ HWTEST2_F(HostPointerManagerCommandListTest, givenImmediateCommandListWhenMemory ASSERT_NE(nullptr, commandList0); CommandQueueImp *cmdQueue = reinterpret_cast(commandList0->cmdQImmediate); - EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + if (neoDevice->getInternalCopyEngine()) { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalCopyEngine()->commandStreamReceiver); + } else { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + } ret = hostDriverHandle->importExternalPointer(heapPointer, MemoryConstants::pageSize); EXPECT_EQ(ZE_RESULT_SUCCESS, ret); @@ -619,7 +623,11 @@ HWTEST2_F(HostPointerManagerCommandListTest, givenImmediateCommandListWhenMemory ASSERT_NE(nullptr, commandList0); CommandQueueImp *cmdQueue = reinterpret_cast(commandList0->cmdQImmediate); - EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + if (neoDevice->getInternalCopyEngine()) { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalCopyEngine()->commandStreamReceiver); + } else { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + } ret = hostDriverHandle->importExternalPointer(heapPointer, MemoryConstants::pageSize); EXPECT_EQ(ZE_RESULT_SUCCESS, ret); diff --git a/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger.cpp b/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger.cpp index 3f9dc003d1..fbcbfdd88c 100644 --- a/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger.cpp +++ b/level_zero/core/test/unit_tests/sources/debugger/test_l0_debugger.cpp @@ -745,7 +745,11 @@ HWTEST2_F(L0DebuggerInternalUsageTest, givenUseCsrImmediateSubmissionEnabledForI ASSERT_NE(nullptr, commandList0); CommandQueueImp *cmdQueue = reinterpret_cast(commandList0->cmdQImmediate); - EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + if (neoDevice->getInternalCopyEngine()) { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalCopyEngine()->commandStreamReceiver); + } else { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + } ze_image_desc_t desc = {}; desc.stype = ZE_STRUCTURE_TYPE_IMAGE_DESC; @@ -793,7 +797,11 @@ HWTEST2_F(L0DebuggerInternalUsageTest, givenUseCsrImmediateSubmissionDisabledFor ASSERT_NE(nullptr, commandList0); CommandQueueImp *cmdQueue = reinterpret_cast(commandList0->cmdQImmediate); - EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + if (neoDevice->getInternalCopyEngine()) { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalCopyEngine()->commandStreamReceiver); + } else { + EXPECT_EQ(cmdQueue->getCsr(), neoDevice->getInternalEngine().commandStreamReceiver); + } ze_image_desc_t desc = {}; desc.stype = ZE_STRUCTURE_TYPE_IMAGE_DESC; diff --git a/shared/source/device/device.cpp b/shared/source/device/device.cpp index bf64261983..ba14936379 100644 --- a/shared/source/device/device.cpp +++ b/shared/source/device/device.cpp @@ -565,6 +565,16 @@ EngineControl &Device::getInternalEngine() { return this->getNearestGenericSubDevice(0)->getEngine(engineType, EngineUsage::Internal); } +EngineControl *Device::getInternalCopyEngine() { + for (auto &engine : engines) { + if (engine.osContext->getEngineType() == aub_stream::ENGINE_BCS && + engine.osContext->isInternalEngine()) { + return &engine; + } + } + return nullptr; +} + void Device::initializeRayTracing() { if (rtMemoryBackedBuffer == nullptr) { auto size = RayTracingHelper::getTotalMemoryBackedFifoSize(*this); diff --git a/shared/source/device/device.h b/shared/source/device/device.h index 8481731e18..ea9452e208 100644 --- a/shared/source/device/device.h +++ b/shared/source/device/device.h @@ -66,6 +66,7 @@ class Device : public ReferenceTrackedObject { EngineControl &getEngine(uint32_t index); EngineControl &getDefaultEngine(); EngineControl &getInternalEngine(); + EngineControl *getInternalCopyEngine(); SelectorCopyEngine &getSelectorCopyEngine(); MemoryManager *getMemoryManager() const; GmmHelper *getGmmHelper() const;