Do not update tag on pipe control with level change.

- Tag should be updated only as a part of epilogue.
- Level change should only emit pipe control with cs stall

Change-Id: I6e04f794641818b0d046523776d3ce87aec9f606
This commit is contained in:
Mrozek, Michal
2018-02-07 14:08:14 +01:00
parent dbe3bdb8a3
commit c17a2f70fd
3 changed files with 4 additions and 26 deletions

View File

@ -267,30 +267,8 @@ CompletionStamp CommandStreamReceiverHw<GfxFamily>::flushTask(
}
// Add a PC if we have a dependency on a previous walker to avoid concurrency issues.
if (taskLevel > this->taskLevel) {
//Some architectures (SKL) requires to have pipe control prior to pipe control with tag write, add it here
addPipeControlWA(commandStreamCSR, false);
auto pCmd = addPipeControlCmd(commandStreamCSR);
pCmd->setPostSyncOperation(PIPE_CONTROL::POST_SYNC_OPERATION_WRITE_IMMEDIATE_DATA);
if (DebugManager.flags.FlushAllCaches.get()) {
pCmd->setDcFlushEnable(true);
pCmd->setRenderTargetCacheFlushEnable(true);
pCmd->setInstructionCacheInvalidateEnable(true);
pCmd->setTextureCacheInvalidationEnable(true);
pCmd->setPipeControlFlushEnable(true);
pCmd->setVfCacheInvalidationEnable(true);
pCmd->setConstantCacheInvalidationEnable(true);
pCmd->setStateCacheInvalidationEnable(true);
}
auto address = (uint64_t)this->getTagAddress();
pCmd->setAddressHigh(address >> 32);
pCmd->setAddress(address & (0xffffffff));
pCmd->setImmediateData(this->taskCount);
addPipeControl(commandStreamCSR, false);
this->taskLevel = taskLevel;
this->latestSentTaskCount = std::max(this->taskCount, (uint32_t)this->latestSentTaskCount);
DBG_LOG(LogTaskCounts, __FUNCTION__, "Line: ", __LINE__, "this->taskCount", this->taskCount);
}