RelaxedOrdering: Add support for return pointer registers programming

Related-To: NEO-7458

Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:
Dunajski, Bartosz
2022-11-21 14:55:39 +00:00
committed by Compute-Runtime-Automation
parent 565d44e59c
commit e050d231b9
11 changed files with 303 additions and 13 deletions

View File

@@ -589,6 +589,9 @@ size_t CommandQueueHw<gfxCoreFamily>::estimateLinearStreamSizeInitial(
if (ctx.isDirectSubmissionEnabled) {
linearStreamSizeEstimate += NEO::EncodeBatchBufferStartOrEnd<GfxFamily>::getBatchBufferStartSize();
if (NEO::DebugManager.flags.DirectSubmissionRelaxedOrdering.get() == 1) {
linearStreamSizeEstimate += 2 * sizeof(typename GfxFamily::MI_LOAD_REGISTER_REG);
}
} else {
linearStreamSizeEstimate += NEO::EncodeBatchBufferStartOrEnd<GfxFamily>::getBatchBufferEndSize();
}
@@ -1040,8 +1043,17 @@ NEO::SubmissionStatus CommandQueueHw<gfxCoreFamily>::prepareAndSubmitBatchBuffer
startAddress = 0;
}
bool indirect = false;
if (csr->directSubmissionRelaxedOrderingEnabled()) {
// Indirect BB_START operates only on GPR_0
NEO::EncodeSetMMIO<GfxFamily>::encodeREG(innerCommandStream, CS_GPR_R0, CS_GPR_R3);
NEO::EncodeSetMMIO<GfxFamily>::encodeREG(innerCommandStream, CS_GPR_R0 + 4, CS_GPR_R3 + 4);
indirect = true;
}
endingCmd = innerCommandStream.getSpace(0);
NEO::EncodeBatchBufferStartOrEnd<GfxFamily>::programBatchBufferStart(&innerCommandStream, startAddress, false, false, false);
NEO::EncodeBatchBufferStartOrEnd<GfxFamily>::programBatchBufferStart(&innerCommandStream, startAddress, false, indirect, false);
} else {
auto buffer = innerCommandStream.getSpaceForCmd<MI_BATCH_BUFFER_END>();
*(MI_BATCH_BUFFER_END *)buffer = GfxFamily::cmdInitBatchBufferEnd;