radv: do not dump descriptors twice in hang reports

If a pipeline has both graphics and compute, descriptors are same.
While we are at it, use queue->device for simplicity.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
Samuel Pitoiset
2019-10-15 15:32:13 +02:00
parent cf5e55558e
commit b139198b06

View File

@@ -193,9 +193,10 @@ radv_dump_combined_image_sampler_descriptor(enum chip_class chip_class,
} }
static void static void
radv_dump_descriptor_set(enum chip_class chip_class, radv_dump_descriptor_set(struct radv_device *device,
struct radv_descriptor_set *set, unsigned id, FILE *f) struct radv_descriptor_set *set, unsigned id, FILE *f)
{ {
enum chip_class chip_class = device->physical_device->rad_info.chip_class;
const struct radv_descriptor_set_layout *layout; const struct radv_descriptor_set_layout *layout;
int i; int i;
@@ -239,10 +240,8 @@ radv_dump_descriptor_set(enum chip_class chip_class,
} }
static void static void
radv_dump_descriptors(struct radv_pipeline *pipeline, FILE *f) radv_dump_descriptors(struct radv_device *device, FILE *f)
{ {
struct radv_device *device = pipeline->device;
enum chip_class chip_class = device->physical_device->rad_info.chip_class;
uint64_t *ptr = (uint64_t *)device->trace_id_ptr; uint64_t *ptr = (uint64_t *)device->trace_id_ptr;
int i; int i;
@@ -251,7 +250,7 @@ radv_dump_descriptors(struct radv_pipeline *pipeline, FILE *f)
struct radv_descriptor_set *set = struct radv_descriptor_set *set =
(struct radv_descriptor_set *)ptr[i + 3]; (struct radv_descriptor_set *)ptr[i + 3];
radv_dump_descriptor_set(chip_class, set, i, f); radv_dump_descriptor_set(device, set, i, f);
} }
} }
@@ -458,11 +457,11 @@ radv_dump_pipeline_state(struct radv_pipeline *pipeline,
{ {
radv_dump_shaders(pipeline, active_stages, f); radv_dump_shaders(pipeline, active_stages, f);
radv_dump_annotated_shaders(pipeline, active_stages, f); radv_dump_annotated_shaders(pipeline, active_stages, f);
radv_dump_descriptors(pipeline, f);
} }
static void static void
radv_dump_graphics_state(struct radv_pipeline *graphics_pipeline, radv_dump_graphics_state(struct radv_device *device,
struct radv_pipeline *graphics_pipeline,
struct radv_pipeline *compute_pipeline, FILE *f) struct radv_pipeline *compute_pipeline, FILE *f)
{ {
VkShaderStageFlagBits active_stages; VkShaderStageFlagBits active_stages;
@@ -476,10 +475,13 @@ radv_dump_graphics_state(struct radv_pipeline *graphics_pipeline,
active_stages = VK_SHADER_STAGE_COMPUTE_BIT; active_stages = VK_SHADER_STAGE_COMPUTE_BIT;
radv_dump_pipeline_state(compute_pipeline, active_stages, f); radv_dump_pipeline_state(compute_pipeline, active_stages, f);
} }
radv_dump_descriptors(device, f);
} }
static void static void
radv_dump_compute_state(struct radv_pipeline *compute_pipeline, FILE *f) radv_dump_compute_state(struct radv_device *device,
struct radv_pipeline *compute_pipeline, FILE *f)
{ {
VkShaderStageFlagBits active_stages = VK_SHADER_STAGE_COMPUTE_BIT; VkShaderStageFlagBits active_stages = VK_SHADER_STAGE_COMPUTE_BIT;
@@ -487,6 +489,7 @@ radv_dump_compute_state(struct radv_pipeline *compute_pipeline, FILE *f)
return; return;
radv_dump_pipeline_state(compute_pipeline, active_stages, f); radv_dump_pipeline_state(compute_pipeline, active_stages, f);
radv_dump_descriptors(device, f);
} }
static struct radv_pipeline * static struct radv_pipeline *
@@ -622,12 +625,14 @@ radv_check_gpu_hangs(struct radv_queue *queue, struct radeon_cmdbuf *cs)
switch (ring) { switch (ring) {
case RING_GFX: case RING_GFX:
fprintf(stderr, "RING_GFX:\n"); fprintf(stderr, "RING_GFX:\n");
radv_dump_graphics_state(graphics_pipeline, compute_pipeline, radv_dump_graphics_state(queue->device,
graphics_pipeline, compute_pipeline,
stderr); stderr);
break; break;
case RING_COMPUTE: case RING_COMPUTE:
fprintf(stderr, "RING_COMPUTE:\n"); fprintf(stderr, "RING_COMPUTE:\n");
radv_dump_compute_state(compute_pipeline, stderr); radv_dump_compute_state(queue->device,
compute_pipeline, stderr);
break; break;
default: default:
assert(0); assert(0);