From 7fcc1bc1add2deb8ba44d3ee82f6dd845efb9cba Mon Sep 17 00:00:00 2001 From: Krzysztof Gibala Date: Fri, 6 Nov 2020 13:21:53 +0100 Subject: [PATCH] Use first device for blit transfer when buffer is creating Related-To: NEO-4589 Signed-off-by: Krzysztof Gibala --- opencl/source/mem_obj/buffer.cpp | 2 +- .../test/unit_test/mem_obj/buffer_bcs_tests.cpp | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/opencl/source/mem_obj/buffer.cpp b/opencl/source/mem_obj/buffer.cpp index a645173849..a7308e6cfb 100644 --- a/opencl/source/mem_obj/buffer.cpp +++ b/opencl/source/mem_obj/buffer.cpp @@ -381,7 +381,7 @@ Buffer *Buffer::create(Context *context, bool gpuCopyRequired = (gmm && gmm->isRenderCompressed) || !MemoryPool::isSystemMemoryPool(allocationInfo[rootDeviceIndex].memory->getMemoryPool()); if (gpuCopyRequired) { - auto blitMemoryToAllocationResult = BlitHelperFunctions::blitMemoryToAllocation(pBuffer->getContext()->getDevice(rootDeviceIndex)->getDevice(), allocationInfo[rootDeviceIndex].memory, pBuffer->getOffset(), hostPtr, {size, 1, 1}); + auto blitMemoryToAllocationResult = BlitHelperFunctions::blitMemoryToAllocation(pBuffer->getContext()->getDevice(0u)->getDevice(), allocationInfo[rootDeviceIndex].memory, pBuffer->getOffset(), hostPtr, {size, 1, 1}); if (blitMemoryToAllocationResult != BlitOperationResult::Success) { auto cmdQ = context->getSpecialQueue(rootDeviceIndex); diff --git a/opencl/test/unit_test/mem_obj/buffer_bcs_tests.cpp b/opencl/test/unit_test/mem_obj/buffer_bcs_tests.cpp index 5a98581bc2..02bd1fb1f9 100644 --- a/opencl/test/unit_test/mem_obj/buffer_bcs_tests.cpp +++ b/opencl/test/unit_test/mem_obj/buffer_bcs_tests.cpp @@ -139,6 +139,22 @@ HWTEST_TEMPLATED_F(BcsBufferTests, givenBufferWithInitializationDataAndBcsCsrWhe EXPECT_EQ(1u, bcsCsr->blitBufferCalled); } +HWTEST_TEMPLATED_F(BcsBufferTests, givenBufferWithNotDefaultRootDeviceIndexAndBcsCsrWhenCreatingThenUseBlitOperation) { + + std::unique_ptr newDevice = std::make_unique(MockDevice::createWithNewExecutionEnvironment(nullptr, 1u)); + std::unique_ptr newBcsMockContext = std::make_unique(newDevice.get()); + + auto bcsCsr = static_cast *>(newBcsMockContext->bcsCsr.get()); + auto newMemoryManager = new MockMemoryManager(true, true, *newDevice->getExecutionEnvironment()); + + newDevice->getExecutionEnvironment()->memoryManager.reset(newMemoryManager); + newBcsMockContext->memoryManager = newMemoryManager; + + EXPECT_EQ(0u, bcsCsr->blitBufferCalled); + auto bufferForBlt = clUniquePtr(Buffer::create(newBcsMockContext.get(), CL_MEM_COPY_HOST_PTR, 2000, &hostPtr, retVal)); + EXPECT_EQ(1u, bcsCsr->blitBufferCalled); +} + HWTEST_TEMPLATED_F(BcsBufferTests, givenBcsSupportedWhenEnqueueBufferOperationIsCalledThenUseBcsCsr) { DebugManager.flags.EnableBlitterForEnqueueOperations.set(0); auto bcsCsr = static_cast *>(commandQueue->getBcsCommandStreamReceiver());