radv: save the vertex prolog to the trace BO for debugging

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13376>
This commit is contained in:
Samuel Pitoiset
2021-10-15 10:52:09 +02:00
committed by Marge Bot
parent 2bf25e6f6e
commit d659c2ef9c
2 changed files with 25 additions and 4 deletions

View File

@@ -758,6 +758,23 @@ radv_save_vertex_descriptors(struct radv_cmd_buffer *cmd_buffer, uint64_t vb_ptr
radv_emit_write_data_packet(cmd_buffer, V_370_ME, va, 2, data); radv_emit_write_data_packet(cmd_buffer, V_370_ME, va, 2, data);
} }
static void
radv_save_vs_prolog(struct radv_cmd_buffer *cmd_buffer, const struct radv_shader_prolog *prolog)
{
struct radv_device *device = cmd_buffer->device;
uint32_t data[2];
uint64_t va;
va = radv_buffer_get_va(device->trace_bo);
va += 32;
uint64_t prolog_address = (uintptr_t)prolog;
data[0] = prolog_address;
data[1] = prolog_address >> 32;
radv_emit_write_data_packet(cmd_buffer, V_370_ME, va, 2, data);
}
void void
radv_set_descriptor_set(struct radv_cmd_buffer *cmd_buffer, VkPipelineBindPoint bind_point, radv_set_descriptor_set(struct radv_cmd_buffer *cmd_buffer, VkPipelineBindPoint bind_point,
struct radv_descriptor_set *set, unsigned idx) struct radv_descriptor_set *set, unsigned idx)
@@ -779,7 +796,7 @@ radv_save_descriptors(struct radv_cmd_buffer *cmd_buffer, VkPipelineBindPoint bi
struct radv_device *device = cmd_buffer->device; struct radv_device *device = cmd_buffer->device;
uint32_t data[MAX_SETS * 2] = {0}; uint32_t data[MAX_SETS * 2] = {0};
uint64_t va; uint64_t va;
va = radv_buffer_get_va(device->trace_bo) + 32; va = radv_buffer_get_va(device->trace_bo) + 40;
u_foreach_bit(i, descriptors_state->valid) u_foreach_bit(i, descriptors_state->valid)
{ {
@@ -3006,6 +3023,9 @@ radv_emit_vertex_input(struct radv_cmd_buffer *cmd_buffer, bool pipeline_is_dirt
emit_prolog_inputs(cmd_buffer, vs_shader, nontrivial_divisors, pipeline_is_dirty); emit_prolog_inputs(cmd_buffer, vs_shader, nontrivial_divisors, pipeline_is_dirty);
cmd_buffer->state.emitted_vs_prolog = prolog; cmd_buffer->state.emitted_vs_prolog = prolog;
if (unlikely(cmd_buffer->device->trace_bo))
radv_save_vs_prolog(cmd_buffer, prolog);
} }
static void static void

View File

@@ -56,9 +56,10 @@
* [2-3]: 64-bit GFX ring pipeline pointer * [2-3]: 64-bit GFX ring pipeline pointer
* [4-5]: 64-bit COMPUTE ring pipeline pointer * [4-5]: 64-bit COMPUTE ring pipeline pointer
* [6-7]: Vertex descriptors pointer * [6-7]: Vertex descriptors pointer
* [8-9]: 64-bit descriptor set #0 pointer * [8-9]: 64-bit Vertex prolog pointer
* [10-11]: 64-bit descriptor set #0 pointer
* ... * ...
* [68-69]: 64-bit descriptor set #31 pointer * [72-73]: 64-bit descriptor set #31 pointer
*/ */
bool bool
@@ -245,7 +246,7 @@ radv_dump_descriptors(struct radv_device *device, FILE *f)
fprintf(f, "Descriptors:\n"); fprintf(f, "Descriptors:\n");
for (i = 0; i < MAX_SETS; i++) { for (i = 0; i < MAX_SETS; i++) {
struct radv_descriptor_set *set = *(struct radv_descriptor_set **)(ptr + i + 4); struct radv_descriptor_set *set = *(struct radv_descriptor_set **)(ptr + i + 5);
radv_dump_descriptor_set(device, set, i, f); radv_dump_descriptor_set(device, set, i, f);
} }