Alternate indirect buffer command.

This commit is contained in:
Ben Vanik 2015-12-07 19:16:01 -08:00
parent ed0b97813a
commit 522ff9d23e
2 changed files with 5 additions and 3 deletions

View File

@ -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;
} }

View File

@ -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"};