mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-30 09:58:55 +08:00
feature: update conditional bb start to use qword data
Related-To: NEO-8242 Signed-off-by: Dunajski, Bartosz <bartosz.dunajski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
def3f2e9ad
commit
2a6be2fccd
@@ -439,17 +439,23 @@ struct EncodeBatchBufferStartOrEnd {
|
||||
static void programBatchBufferEnd(CommandContainer &container);
|
||||
static void programBatchBufferEnd(LinearStream &commandStream);
|
||||
|
||||
static void programConditionalDataMemBatchBufferStart(LinearStream &commandStream, uint64_t startAddress, uint64_t compareAddress, uint32_t compareData, CompareOperation compareOperation, bool indirect);
|
||||
static void programConditionalDataRegBatchBufferStart(LinearStream &commandStream, uint64_t startAddress, uint32_t compareReg, uint32_t compareData, CompareOperation compareOperation, bool indirect);
|
||||
static void programConditionalDataMemBatchBufferStart(LinearStream &commandStream, uint64_t startAddress, uint64_t compareAddress, uint64_t compareData, CompareOperation compareOperation, bool indirect, bool useQwordData);
|
||||
static void programConditionalDataRegBatchBufferStart(LinearStream &commandStream, uint64_t startAddress, uint32_t compareReg, uint64_t compareData, CompareOperation compareOperation, bool indirect, bool useQwordData);
|
||||
static void programConditionalRegRegBatchBufferStart(LinearStream &commandStream, uint64_t startAddress, AluRegisters compareReg0, AluRegisters compareReg1, CompareOperation compareOperation, bool indirect);
|
||||
static void programConditionalRegMemBatchBufferStart(LinearStream &commandStream, uint64_t startAddress, uint64_t compareAddress, uint32_t compareReg, CompareOperation compareOperation, bool indirect);
|
||||
|
||||
static size_t constexpr getCmdSizeConditionalDataMemBatchBufferStart() {
|
||||
return (getCmdSizeConditionalBufferStartBase() + sizeof(typename GfxFamily::MI_LOAD_REGISTER_MEM) + (3 * sizeof(typename GfxFamily::MI_LOAD_REGISTER_IMM)));
|
||||
static size_t constexpr getCmdSizeConditionalDataMemBatchBufferStart(bool useQwordData) {
|
||||
size_t size = (getCmdSizeConditionalBufferStartBase() + sizeof(typename GfxFamily::MI_LOAD_REGISTER_MEM) + (2 * sizeof(typename GfxFamily::MI_LOAD_REGISTER_IMM)));
|
||||
size += useQwordData ? sizeof(typename GfxFamily::MI_LOAD_REGISTER_MEM) : sizeof(typename GfxFamily::MI_LOAD_REGISTER_IMM);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
static size_t constexpr getCmdSizeConditionalDataRegBatchBufferStart() {
|
||||
return (getCmdSizeConditionalBufferStartBase() + sizeof(typename GfxFamily::MI_LOAD_REGISTER_REG) + (3 * sizeof(typename GfxFamily::MI_LOAD_REGISTER_IMM)));
|
||||
static size_t constexpr getCmdSizeConditionalDataRegBatchBufferStart(bool useQwordData) {
|
||||
size_t size = (getCmdSizeConditionalBufferStartBase() + sizeof(typename GfxFamily::MI_LOAD_REGISTER_REG) + (2 * sizeof(typename GfxFamily::MI_LOAD_REGISTER_IMM)));
|
||||
size += useQwordData ? sizeof(typename GfxFamily::MI_LOAD_REGISTER_REG) : sizeof(typename GfxFamily::MI_LOAD_REGISTER_IMM);
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
static size_t constexpr getCmdSizeConditionalRegMemBatchBufferStart() {
|
||||
|
||||
@@ -859,24 +859,39 @@ void EncodeAtomic<Family>::programMiAtomic(LinearStream &commandStream,
|
||||
|
||||
template <typename Family>
|
||||
void EncodeBatchBufferStartOrEnd<Family>::programConditionalDataMemBatchBufferStart(LinearStream &commandStream, uint64_t startAddress, uint64_t compareAddress,
|
||||
uint32_t compareData, CompareOperation compareOperation, bool indirect) {
|
||||
uint64_t compareData, CompareOperation compareOperation, bool indirect, bool useQwordData) {
|
||||
EncodeSetMMIO<Family>::encodeMEM(commandStream, CS_GPR_R7, compareAddress);
|
||||
LriHelper<Family>::program(&commandStream, CS_GPR_R7 + 4, 0, true);
|
||||
|
||||
LriHelper<Family>::program(&commandStream, CS_GPR_R8, compareData, true);
|
||||
LriHelper<Family>::program(&commandStream, CS_GPR_R8 + 4, 0, true);
|
||||
if (useQwordData) {
|
||||
EncodeSetMMIO<Family>::encodeMEM(commandStream, CS_GPR_R7 + 4, compareAddress + 4);
|
||||
} else {
|
||||
LriHelper<Family>::program(&commandStream, CS_GPR_R7 + 4, 0, true);
|
||||
}
|
||||
|
||||
uint32_t compareDataLow = static_cast<uint32_t>(compareData & std::numeric_limits<uint32_t>::max());
|
||||
uint32_t compareDataHigh = useQwordData ? static_cast<uint32_t>(compareData >> 32) : 0;
|
||||
|
||||
LriHelper<Family>::program(&commandStream, CS_GPR_R8, compareDataLow, true);
|
||||
LriHelper<Family>::program(&commandStream, CS_GPR_R8 + 4, compareDataHigh, true);
|
||||
|
||||
programConditionalBatchBufferStartBase(commandStream, startAddress, AluRegisters::R_7, AluRegisters::R_8, compareOperation, indirect);
|
||||
}
|
||||
|
||||
template <typename Family>
|
||||
void EncodeBatchBufferStartOrEnd<Family>::programConditionalDataRegBatchBufferStart(LinearStream &commandStream, uint64_t startAddress, uint32_t compareReg,
|
||||
uint32_t compareData, CompareOperation compareOperation, bool indirect) {
|
||||
uint64_t compareData, CompareOperation compareOperation, bool indirect, bool useQwordData) {
|
||||
EncodeSetMMIO<Family>::encodeREG(commandStream, CS_GPR_R7, compareReg);
|
||||
LriHelper<Family>::program(&commandStream, CS_GPR_R7 + 4, 0, true);
|
||||
if (useQwordData) {
|
||||
EncodeSetMMIO<Family>::encodeREG(commandStream, CS_GPR_R7 + 4, compareReg + 4);
|
||||
} else {
|
||||
LriHelper<Family>::program(&commandStream, CS_GPR_R7 + 4, 0, true);
|
||||
}
|
||||
|
||||
LriHelper<Family>::program(&commandStream, CS_GPR_R8, compareData, true);
|
||||
LriHelper<Family>::program(&commandStream, CS_GPR_R8 + 4, 0, true);
|
||||
uint32_t compareDataLow = static_cast<uint32_t>(compareData & std::numeric_limits<uint32_t>::max());
|
||||
uint32_t compareDataHigh = useQwordData ? static_cast<uint32_t>(compareData >> 32) : 0;
|
||||
|
||||
LriHelper<Family>::program(&commandStream, CS_GPR_R8, compareDataLow, true);
|
||||
LriHelper<Family>::program(&commandStream, CS_GPR_R8 + 4, compareDataHigh, true);
|
||||
|
||||
programConditionalBatchBufferStartBase(commandStream, startAddress, AluRegisters::R_7, AluRegisters::R_8, compareOperation, indirect);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user