diff --git a/runtime/command_queue/enqueue_common.h b/runtime/command_queue/enqueue_common.h index e72946f1c7..57ecd01781 100644 --- a/runtime/command_queue/enqueue_common.h +++ b/runtime/command_queue/enqueue_common.h @@ -471,6 +471,8 @@ void CommandQueueHw::processDispatchForBlitEnqueue(const MultiDispatc blitProperties.csrDependencies.push_back(&previousTimestampPacketNodes); blitProperties.outputTimestampPacket = timestampPacketContainer.get(); + previousTimestampPacketNodes.makeResident(*blitCommandStreamReceiver); + timestampPacketContainer->makeResident(*blitCommandStreamReceiver); blitCommandStreamReceiver->blitBuffer(blitProperties); auto currentTimestampPacketNode = timestampPacketContainer->peekNodes().at(0); diff --git a/unit_tests/mem_obj/buffer_tests.cpp b/unit_tests/mem_obj/buffer_tests.cpp index 1ae8b424e4..c7ed214bfc 100644 --- a/unit_tests/mem_obj/buffer_tests.cpp +++ b/unit_tests/mem_obj/buffer_tests.cpp @@ -882,6 +882,34 @@ HWTEST_F(BcsBufferTests, givenOutputTimestampPacketWhenBlitCalledThenProgramMiFl EXPECT_TRUE(blitCmdFound); } +HWTEST_F(BcsBufferTests, givenInputAndOutputTimestampPacketWhenBlitCalledThenMakeThemResident) { + auto bcsCsr = static_cast *>(bcsMockContext->bcsCsr.get()); + + auto cmdQ = clUniquePtr(new MockCommandQueueHw(bcsMockContext.get(), device.get(), nullptr)); + cl_int retVal = CL_SUCCESS; + + auto &cmdQueueCsr = static_cast &>(cmdQ->getCommandStreamReceiver()); + auto memoryManager = cmdQueueCsr.getMemoryManager(); + cmdQueueCsr.timestampPacketAllocator = std::make_unique>(memoryManager, 1, + MemoryConstants::cacheLineSize); + + auto buffer = clUniquePtr(Buffer::create(bcsMockContext.get(), CL_MEM_READ_WRITE, 1, nullptr, retVal)); + buffer->forceDisallowCPUCopy = true; + void *hostPtr = reinterpret_cast(0x12340000); + + // first enqueue to create IOQ dependency + cmdQ->enqueueWriteBuffer(buffer.get(), true, 0, 1, hostPtr, nullptr, 0, nullptr, nullptr); + auto inputTimestampPacketAllocation = cmdQ->timestampPacketContainer->peekNodes().at(0)->getBaseGraphicsAllocation(); + + cmdQ->enqueueWriteBuffer(buffer.get(), true, 0, 1, hostPtr, nullptr, 0, nullptr, nullptr); + auto outputTimestampPacketAllocation = cmdQ->timestampPacketContainer->peekNodes().at(0)->getBaseGraphicsAllocation(); + + EXPECT_NE(outputTimestampPacketAllocation, inputTimestampPacketAllocation); + + EXPECT_EQ(cmdQ->taskCount, inputTimestampPacketAllocation->getTaskCount(bcsCsr->getOsContext().getContextId())); + EXPECT_EQ(cmdQ->taskCount, outputTimestampPacketAllocation->getTaskCount(bcsCsr->getOsContext().getContextId())); +} + HWTEST_F(BcsBufferTests, givenBlockingEnqueueWhenUsingBcsThenCallWait) { class MyMockCsr : public UltCommandStreamReceiver { public: