Pass blitter CSR in blocked queue scenarios

Related-To: NEO-6057
Signed-off-by: Maciej Dziuban <maciej.dziuban@intel.com>
This commit is contained in:
Maciej Dziuban 2021-08-26 15:31:09 +00:00 committed by Compute-Runtime-Automation
parent 92000bd75b
commit 33ac15dabe
5 changed files with 14 additions and 9 deletions

View File

@ -398,7 +398,8 @@ class CommandQueueHw : public CommandQueue {
const EnqueueProperties &enqueueProperties,
EventsRequest &eventsRequest,
EventBuilder &externalEventBuilder,
std::unique_ptr<PrintfHandler> printfHandler);
std::unique_ptr<PrintfHandler> printfHandler,
CommandStreamReceiver *bcsCsr);
CompletionStamp enqueueCommandWithoutKernel(Surface **surfaces,
size_t surfaceCount,

View File

@ -397,7 +397,8 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
enqueueProperties,
eventsRequest,
eventBuilder,
std::move(printfHandler));
std::move(printfHandler),
nullptr);
}
if (deferredTimestampPackets.get()) {
@ -942,7 +943,8 @@ void CommandQueueHw<GfxFamily>::enqueueBlocked(
const EnqueueProperties &enqueueProperties,
EventsRequest &eventsRequest,
EventBuilder &externalEventBuilder,
std::unique_ptr<PrintfHandler> printfHandler) {
std::unique_ptr<PrintfHandler> printfHandler,
CommandStreamReceiver *bcsCsr) {
TakeOwnershipWrapper<CommandQueueHw<GfxFamily>> queueOwnership(*this);
@ -975,6 +977,7 @@ void CommandQueueHw<GfxFamily>::enqueueBlocked(
if (blockedCommandsData) {
if (enqueueProperties.blitPropertiesContainer) {
blockedCommandsData->blitPropertiesContainer = *enqueueProperties.blitPropertiesContainer;
blockedCommandsData->bcsCsr = bcsCsr;
blockedCommandsData->blitEnqueue = true;
}
@ -1233,7 +1236,7 @@ void CommandQueueHw<GfxFamily>::enqueueBlit(const MultiDispatchInfo &multiDispat
updateFromCompletionStamp(completionStamp, eventBuilder.getEvent());
if (blockQueue) {
enqueueBlocked(cmdType, nullptr, 0, multiDispatchInfo, timestampPacketDependencies, blockedCommandsData, enqueueProperties, eventsRequest, eventBuilder, nullptr);
enqueueBlocked(cmdType, nullptr, 0, multiDispatchInfo, timestampPacketDependencies, blockedCommandsData, enqueueProperties, eventsRequest, eventBuilder, nullptr, &bcsCsr);
}
timestampPacketDependencies.moveNodesToNewContainer(*deferredTimestampPackets);

View File

@ -204,7 +204,7 @@ CompletionStamp &CommandComputeKernel::submit(uint32_t taskLevel, bool terminate
}
if (kernelOperation->blitPropertiesContainer.size() > 0) {
auto &bcsCsr = *commandQueue.getBcsCommandStreamReceiver();
auto &bcsCsr = *commandQueue.getBcsForAuxTranslation();
CsrDependencies csrDeps;
eventsRequest.fillCsrDependenciesForTimestampPacketContainer(csrDeps, bcsCsr, CsrDependencies::DependenciesType::All);
@ -287,7 +287,7 @@ CompletionStamp &CommandComputeKernel::submit(uint32_t taskLevel, bool terminate
commandQueue.getDevice());
if (kernelOperation->blitPropertiesContainer.size() > 0) {
auto bcsTaskCount = commandQueue.getBcsCommandStreamReceiver()->blitBuffer(kernelOperation->blitPropertiesContainer, false, commandQueue.isProfilingEnabled(), commandQueue.getDevice());
auto bcsTaskCount = commandQueue.getBcsForAuxTranslation()->blitBuffer(kernelOperation->blitPropertiesContainer, false, commandQueue.isProfilingEnabled(), commandQueue.getDevice());
commandQueue.updateBcsTaskCount(bcsTaskCount);
}
commandQueue.updateLatestSentEnqueueType(EnqueueProperties::Operation::GpuKernel);
@ -310,7 +310,7 @@ CompletionStamp &CommandComputeKernel::submit(uint32_t taskLevel, bool terminate
}
void CommandWithoutKernel::dispatchBlitOperation() {
auto bcsCsr = commandQueue.getBcsCommandStreamReceiver();
auto bcsCsr = kernelOperation->bcsCsr;
UNRECOVERABLE_IF(bcsCsr == nullptr);
UNRECOVERABLE_IF(kernelOperation->blitPropertiesContainer.size() != 1);

View File

@ -76,6 +76,7 @@ struct KernelOperation {
IndirectHeapUniquePtrT ioh{nullptr, resourceCleaner};
IndirectHeapUniquePtrT ssh{nullptr, resourceCleaner};
CommandStreamReceiver *bcsCsr = nullptr;
BlitPropertiesContainer blitPropertiesContainer;
bool blitEnqueue = false;
size_t surfaceStateHeapSizeEM = 0;

View File

@ -157,7 +157,7 @@ HWTEST_F(EnqueueHandlerTest, givenNonBlitPropertyWhenEnqueueIsBlockedThenDontReg
Surface *surfaces[] = {nullptr};
mockCmdQ->enqueueBlocked(CL_COMMAND_MARKER, surfaces, size_t(0), multiDispatchInfo, timestampPacketDependencies,
blockedCommandsData, enqueuePropertiesForDependencyFlush, eventsRequest,
eventBuilder, std::unique_ptr<PrintfHandler>(nullptr));
eventBuilder, std::unique_ptr<PrintfHandler>(nullptr), nullptr);
EXPECT_FALSE(blockedCommandsDataForDependencyFlush->blitEnqueue);
}
@ -186,7 +186,7 @@ HWTEST_F(EnqueueHandlerTest, givenBlitPropertyWhenEnqueueIsBlockedThenRegisterBl
Surface *surfaces[] = {nullptr};
mockCmdQ->enqueueBlocked(CL_COMMAND_READ_BUFFER, surfaces, size_t(0), multiDispatchInfo, timestampPacketDependencies,
blockedCommandsData, enqueuePropertiesForBlitEnqueue, eventsRequest,
eventBuilder, std::unique_ptr<PrintfHandler>(nullptr));
eventBuilder, std::unique_ptr<PrintfHandler>(nullptr), mockCmdQ->getBcsCommandStreamReceiver());
EXPECT_TRUE(blockedCommandsDataForBlitEnqueue->blitEnqueue);
EXPECT_EQ(blitProperties.srcAllocation, blockedCommandsDataForBlitEnqueue->blitPropertiesContainer.begin()->srcAllocation);
EXPECT_EQ(blitProperties.dstAllocation, blockedCommandsDataForBlitEnqueue->blitPropertiesContainer.begin()->dstAllocation);