Alternate indirect buffer command.
This commit is contained in:
parent
ed0b97813a
commit
522ff9d23e
|
@ -377,7 +377,7 @@ void CommandProcessor::ExecutePrimaryBuffer(uint32_t start_index,
|
||||||
void CommandProcessor::ExecuteIndirectBuffer(uint32_t ptr, uint32_t length) {
|
void CommandProcessor::ExecuteIndirectBuffer(uint32_t ptr, uint32_t length) {
|
||||||
SCOPE_profile_cpu_f("gpu");
|
SCOPE_profile_cpu_f("gpu");
|
||||||
|
|
||||||
trace_writer_.WriteIndirectBufferStart(ptr, length / sizeof(uint32_t));
|
trace_writer_.WriteIndirectBufferStart(ptr, length * sizeof(uint32_t));
|
||||||
|
|
||||||
// Execute commands!
|
// Execute commands!
|
||||||
uint32_t ptr_mask = 0;
|
uint32_t ptr_mask = 0;
|
||||||
|
@ -509,6 +509,7 @@ bool CommandProcessor::ExecutePacketType3(RingbufferReader* reader,
|
||||||
result = ExecutePacketType3_XE_SWAP(reader, packet, count);
|
result = ExecutePacketType3_XE_SWAP(reader, packet, count);
|
||||||
break;
|
break;
|
||||||
case PM4_INDIRECT_BUFFER:
|
case PM4_INDIRECT_BUFFER:
|
||||||
|
case PM4_INDIRECT_BUFFER_PFD:
|
||||||
result = ExecutePacketType3_INDIRECT_BUFFER(reader, packet, count);
|
result = ExecutePacketType3_INDIRECT_BUFFER(reader, packet, count);
|
||||||
break;
|
break;
|
||||||
case PM4_WAIT_REG_MEM:
|
case PM4_WAIT_REG_MEM:
|
||||||
|
@ -683,7 +684,7 @@ bool CommandProcessor::ExecutePacketType3_INDIRECT_BUFFER(
|
||||||
RingbufferReader* reader, uint32_t packet, uint32_t count) {
|
RingbufferReader* reader, uint32_t packet, uint32_t count) {
|
||||||
// indirect buffer dispatch
|
// indirect buffer dispatch
|
||||||
uint32_t list_ptr = CpuToGpu(reader->Read());
|
uint32_t list_ptr = CpuToGpu(reader->Read());
|
||||||
uint32_t list_length = reader->Read();
|
uint32_t list_length = reader->Read() & 0xFFFFF;
|
||||||
ExecuteIndirectBuffer(GpuToCpu(list_ptr), list_length);
|
ExecuteIndirectBuffer(GpuToCpu(list_ptr), list_length);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -159,7 +159,8 @@ bool PacketDisassembler::DisasmPacketType3(const uint8_t* base_ptr,
|
||||||
uint32_t frontbuffer_ptr = xe::load_and_swap<uint32_t>(ptr + 0);
|
uint32_t frontbuffer_ptr = xe::load_and_swap<uint32_t>(ptr + 0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PM4_INDIRECT_BUFFER: {
|
case PM4_INDIRECT_BUFFER:
|
||||||
|
case PM4_INDIRECT_BUFFER_PFD: {
|
||||||
// indirect buffer dispatch
|
// indirect buffer dispatch
|
||||||
static const PacketTypeInfo op_info = {PacketCategory::kGeneric,
|
static const PacketTypeInfo op_info = {PacketCategory::kGeneric,
|
||||||
"PM4_INDIRECT_BUFFER"};
|
"PM4_INDIRECT_BUFFER"};
|
||||||
|
|
Loading…
Reference in New Issue