From 1d4568e54836a3f6d57525e2786d207a78917474 Mon Sep 17 00:00:00 2001 From: Lukasz Jobczyk Date: Tue, 22 Sep 2020 14:19:07 +0200 Subject: [PATCH] Set bb end pointer correctly in batched submission Related-To: NEO-5112 Change-Id: Ideff314e4aee501a02f07142b99307b8d6c08fa1 Signed-off-by: Lukasz Jobczyk --- .../command_stream_receiver_flush_task_3_tests.cpp | 6 ++++++ .../command_stream/command_stream_receiver_hw_base.inl | 2 ++ 2 files changed, 8 insertions(+) diff --git a/opencl/test/unit_test/command_stream/command_stream_receiver_flush_task_3_tests.cpp b/opencl/test/unit_test/command_stream/command_stream_receiver_flush_task_3_tests.cpp index 620acbaf72..54b1ca8ab8 100644 --- a/opencl/test/unit_test/command_stream/command_stream_receiver_flush_task_3_tests.cpp +++ b/opencl/test/unit_test/command_stream/command_stream_receiver_flush_task_3_tests.cpp @@ -134,11 +134,14 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenCsrInBatchingModeAndTwoRecord auto secondBatchBufferAddress = (uint64_t)ptrOffset(secondBatchBuffer->batchBuffer.commandBufferAllocation->getGpuAddress(), secondBatchBuffer->batchBuffer.startOffset); + auto lastbbEndPtr = secondBatchBuffer->batchBuffer.endCmdPtr; + mockCsr->flushBatchedSubmissions(); auto batchBufferStart = genCmdCast(bbEndLocation); ASSERT_NE(nullptr, batchBufferStart); EXPECT_EQ(secondBatchBufferAddress, batchBufferStart->getBatchBufferStartAddressGraphicsaddress472()); + EXPECT_EQ(mockCsr->recordedCommandBuffer->batchBuffer.endCmdPtr, lastbbEndPtr); } HWTEST_F(CommandStreamReceiverFlushTaskTests, givenCsrInBatchingModeAndThreeRecordedCommandBuffersWhenFlushTaskIsCalledThenBatchBuffersAreCombined) { @@ -196,12 +199,15 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenCsrInBatchingModeAndThreeReco auto lastBatchBufferAddress = (uint64_t)ptrOffset(lastBatchBuffer->batchBuffer.commandBufferAllocation->getGpuAddress(), lastBatchBuffer->batchBuffer.startOffset); + auto lastbbEndPtr = lastBatchBuffer->batchBuffer.endCmdPtr; + mockCsr->flushBatchedSubmissions(); auto batchBufferStart = genCmdCast(bbEndLocation); ASSERT_NE(nullptr, batchBufferStart); EXPECT_EQ(lastBatchBufferAddress, batchBufferStart->getBatchBufferStartAddressGraphicsaddress472()); EXPECT_EQ(1, mockCsr->flushCalledCount); + EXPECT_EQ(mockCsr->recordedCommandBuffer->batchBuffer.endCmdPtr, lastbbEndPtr); } HWTEST_F(CommandStreamReceiverFlushTaskTests, givenCsrInBatchingModeAndThreeRecordedCommandBuffersThatUsesAllResourceWhenFlushTaskIsCalledThenBatchBuffersAreNotCombined) { diff --git a/shared/source/command_stream/command_stream_receiver_hw_base.inl b/shared/source/command_stream/command_stream_receiver_hw_base.inl index 3f06265395..889dd9c872 100644 --- a/shared/source/command_stream/command_stream_receiver_hw_base.inl +++ b/shared/source/command_stream/command_stream_receiver_hw_base.inl @@ -698,6 +698,8 @@ inline bool CommandStreamReceiverHw::flushBatchedSubmissions() { ((PIPE_CONTROL *)epiloguePipeControlLocation)->setDcFlushEnable(flushDcInEpilogue); } + primaryCmdBuffer->batchBuffer.endCmdPtr = currentBBendLocation; + if (!this->flush(primaryCmdBuffer->batchBuffer, surfacesForSubmit)) { submitResult = false; break;