diff --git a/opencl/source/command_queue/command_queue_hw.h b/opencl/source/command_queue/command_queue_hw.h index cfcd2216ff..39dd93b1bf 100644 --- a/opencl/source/command_queue/command_queue_hw.h +++ b/opencl/source/command_queue/command_queue_hw.h @@ -92,9 +92,11 @@ class CommandQueueHw : public CommandQueue { gpgpuEngine->osContext->ensureContextInitialized(); gpgpuEngine->commandStreamReceiver->initDirectSubmission(device->getDevice(), *gpgpuEngine->osContext); - if (const EngineControl *mainBcsEngine = bcsEngines[0]; mainBcsEngine != nullptr) { - mainBcsEngine->osContext->ensureContextInitialized(); - mainBcsEngine->commandStreamReceiver->initDirectSubmission(device->getDevice(), *mainBcsEngine->osContext); + for (const EngineControl *engine : bcsEngines) { + if (engine != nullptr) { + engine->osContext->ensureContextInitialized(); + engine->commandStreamReceiver->initDirectSubmission(device->getDevice(), *engine->osContext); + } } } diff --git a/opencl/test/unit_test/command_queue/command_queue_hw_tests.cpp b/opencl/test/unit_test/command_queue/command_queue_hw_tests.cpp index 3ffe1c2003..c9c9b1ca80 100644 --- a/opencl/test/unit_test/command_queue/command_queue_hw_tests.cpp +++ b/opencl/test/unit_test/command_queue/command_queue_hw_tests.cpp @@ -234,6 +234,16 @@ HWTEST_F(CommandQueueHwTest, GivenCommandQueueWhenProcessDispatchForMarkerCalled EXPECT_GT(csr.makeResidentCalledTimes, 0u); } +HWTEST_F(CommandQueueHwTest, GivenCommandQueueWhenItIsCreatedThenInitDirectSubmissionIsCalledOnAllBcsEngines) { + MockCommandQueueHw queue(pContext, pClDevice, nullptr); + for (auto engine : queue.bcsEngines) { + if (engine != nullptr) { + auto csr = static_cast *>(engine->commandStreamReceiver); + EXPECT_EQ(1u, csr->initDirectSubmissionCalled); + } + } +} + HWTEST_F(CommandQueueHwTest, givenCommandQueueWhenAskingForCacheFlushOnBcsThenReturnTrue) { auto pHwQ = static_cast *>(pCmdQ); diff --git a/opencl/test/unit_test/libult/ult_command_stream_receiver.h b/opencl/test/unit_test/libult/ult_command_stream_receiver.h index 772e084eb6..6c398db5ca 100644 --- a/opencl/test/unit_test/libult/ult_command_stream_receiver.h +++ b/opencl/test/unit_test/libult/ult_command_stream_receiver.h @@ -254,6 +254,7 @@ class UltCommandStreamReceiver : public CommandStreamReceiverHw, publ if (ultHwConfig.csrFailInitDirectSubmission) { return false; } + initDirectSubmissionCalled++; return BaseClass::CommandStreamReceiver::initDirectSubmission(device, osContext); } @@ -295,6 +296,7 @@ class UltCommandStreamReceiver : public CommandStreamReceiverHw, publ uint32_t latestSentTaskCountValueDuringFlush = 0; uint32_t blitBufferCalled = 0; uint32_t createPerDssBackedBufferCalled = 0; + uint32_t initDirectSubmissionCalled = 0; int ensureCommandBufferAllocationCalled = 0; DispatchFlags recordedDispatchFlags; BlitPropertiesContainer receivedBlitProperties = {};