From: Marek Olšák <marek.ol...@amd.com>

---
 src/gallium/drivers/radeonsi/si_debug.c | 76 ++++++++++++++++++---------------
 1 file changed, 41 insertions(+), 35 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_debug.c 
b/src/gallium/drivers/radeonsi/si_debug.c
index 25c3882..35bfec7 100644
--- a/src/gallium/drivers/radeonsi/si_debug.c
+++ b/src/gallium/drivers/radeonsi/si_debug.c
@@ -378,37 +378,38 @@ static void si_dump_framebuffer(struct si_context *sctx, 
FILE *f)
                r600_print_texture_info(sctx->b.screen, rtex, f);
                fprintf(f, "\n");
        }
 }
 
 typedef unsigned (*slot_remap_func)(unsigned);
 
 static void si_dump_descriptor_list(struct si_descriptors *desc,
                                    const char *shader_name,
                                    const char *elem_name,
+                                   unsigned element_dw_size,
                                    unsigned num_elements,
                                    slot_remap_func slot_remap,
                                    FILE *f)
 {
        unsigned i, j;
 
        for (i = 0; i < num_elements; i++) {
-               unsigned dw_offset = slot_remap(i) * desc->element_dw_size;
+               unsigned dw_offset = slot_remap(i) * element_dw_size;
                uint32_t *gpu_ptr = desc->gpu_list ? desc->gpu_list : 
desc->list;
                const char *list_note = desc->gpu_list ? "GPU list" : "CPU 
list";
                uint32_t *cpu_list = desc->list + dw_offset;
                uint32_t *gpu_list = gpu_ptr + dw_offset;
 
                fprintf(f, COLOR_GREEN "%s%s slot %u (%s):" COLOR_RESET "\n",
                        shader_name, elem_name, i, list_note);
 
-               switch (desc->element_dw_size) {
+               switch (element_dw_size) {
                case 4:
                        for (j = 0; j < 4; j++)
                                ac_dump_reg(f, R_008F00_SQ_BUF_RSRC_WORD0 + j*4,
                                            gpu_list[j], 0xffffffff);
                        break;
                case 8:
                        for (j = 0; j < 8; j++)
                                ac_dump_reg(f, R_008F10_SQ_IMG_RSRC_WORD0 + j*4,
                                            gpu_list[j], 0xffffffff);
 
@@ -454,59 +455,64 @@ static unsigned si_identity(unsigned slot)
 }
 
 static void si_dump_descriptors(struct si_context *sctx,
                                enum pipe_shader_type processor,
                                const struct tgsi_shader_info *info, FILE *f)
 {
        struct si_descriptors *descs =
                &sctx->descriptors[SI_DESCS_FIRST_SHADER +
                                   processor * SI_NUM_SHADER_DESCS];
        static const char *shader_name[] = {"VS", "PS", "GS", "TCS", "TES", 
"CS"};
-
-       static const char *elem_name[] = {
-               " - Constant buffer",
-               " - Shader buffer",
-               " - Sampler",
-               " - Image",
-       };
-       static const slot_remap_func remap_func[] = {
-               si_get_constbuf_slot,
-               si_get_shaderbuf_slot,
-               si_identity,
-               si_identity,
-       };
-       unsigned enabled_slots[] = {
-               sctx->const_and_shader_buffers[processor].enabled_mask >> 
SI_NUM_SHADER_BUFFERS,
-               
util_bitreverse(sctx->const_and_shader_buffers[processor].enabled_mask &
-                               u_bit_consecutive(0, SI_NUM_SHADER_BUFFERS)),
-               sctx->samplers[processor].views.enabled_mask,
-               sctx->images[processor].enabled_mask,
-       };
-       unsigned required_slots[] = {
-               info ? info->const_buffers_declared : 0,
-               info ? info->shader_buffers_declared : 0,
-               info ? info->samplers_declared : 0,
-               info ? info->images_declared : 0,
-       };
+       const char *name = shader_name[processor];
+       unsigned enabled_constbuf, enabled_shaderbuf, enabled_samplers;
+       unsigned enabled_images;
+
+       if (info) {
+               enabled_constbuf = info->const_buffers_declared;
+               enabled_shaderbuf = info->shader_buffers_declared;
+               enabled_samplers = info->samplers_declared;
+               enabled_images = info->images_declared;
+       } else {
+               enabled_constbuf = 
sctx->const_and_shader_buffers[processor].enabled_mask >>
+                                  SI_NUM_SHADER_BUFFERS;
+               enabled_shaderbuf = 
sctx->const_and_shader_buffers[processor].enabled_mask &
+                                   u_bit_consecutive(0, SI_NUM_SHADER_BUFFERS);
+               enabled_shaderbuf = util_bitreverse(enabled_shaderbuf) >>
+                                   (32 - SI_NUM_SHADER_BUFFERS);
+               enabled_samplers = sctx->samplers[processor].views.enabled_mask;
+               enabled_images = sctx->images[processor].enabled_mask;
+       }
 
        if (processor == PIPE_SHADER_VERTEX) {
                assert(info); /* only CS may not have an info struct */
 
-               si_dump_descriptor_list(&sctx->vertex_buffers, 
shader_name[processor],
-                                       " - Vertex buffer", info->num_inputs,
+               si_dump_descriptor_list(&sctx->vertex_buffers, name,
+                                       " - Vertex buffer", 4, info->num_inputs,
                                        si_identity, f);
        }
 
-       for (unsigned i = 0; i < SI_NUM_SHADER_DESCS; ++i, ++descs)
-               si_dump_descriptor_list(descs, shader_name[processor], 
elem_name[i],
-                                       util_last_bit(enabled_slots[i] | 
required_slots[i]),
-                                       remap_func[i], f);
+       
si_dump_descriptor_list(&descs[SI_SHADER_DESCS_CONST_AND_SHADER_BUFFERS],
+                               name, " - Constant buffer", 4,
+                               util_last_bit(enabled_constbuf),
+                               si_get_constbuf_slot, f);
+       
si_dump_descriptor_list(&descs[SI_SHADER_DESCS_CONST_AND_SHADER_BUFFERS],
+                               name, " - Shader buffer", 4,
+                               util_last_bit(enabled_shaderbuf),
+                               si_get_shaderbuf_slot, f);
+       si_dump_descriptor_list(&descs[SI_SHADER_DESCS_SAMPLERS_AND_IMAGES],
+                               name, " - Sampler", 16,
+                               util_last_bit(enabled_samplers),
+                               si_get_sampler_slot, f);
+       si_dump_descriptor_list(&descs[SI_SHADER_DESCS_SAMPLERS_AND_IMAGES],
+                               name, " - Image", 8,
+                               util_last_bit(enabled_images),
+                               si_get_image_slot, f);
 }
 
 static void si_dump_gfx_descriptors(struct si_context *sctx,
                                    const struct si_shader_ctx_state *state,
                                    FILE *f)
 {
        if (!state->cso || !state->current)
                return;
 
        si_dump_descriptors(sctx, state->cso->type, &state->cso->info, f);
@@ -811,21 +817,21 @@ static void si_dump_debug_state(struct pipe_context *ctx, 
FILE *f,
                si_dump_gfx_shader(sctx->screen, &sctx->ps_shader, f);
                si_dump_compute_shader(sctx->screen, &sctx->cs_shader_state, f);
 
                if (flags & PIPE_DUMP_DEVICE_STATUS_REGISTERS) {
                        si_dump_annotated_shaders(sctx, f);
                        si_dump_command("Active waves (raw data)", "umr -wa | 
column -t", f);
                        si_dump_command("Wave information", "umr -O bits -wa", 
f);
                }
 
                si_dump_descriptor_list(&sctx->descriptors[SI_DESCS_RW_BUFFERS],
-                                       "", "RW buffers", SI_NUM_RW_BUFFERS,
+                                       "", "RW buffers", 4, SI_NUM_RW_BUFFERS,
                                        si_identity, f);
                si_dump_gfx_descriptors(sctx, &sctx->vs_shader, f);
                si_dump_gfx_descriptors(sctx, &sctx->tcs_shader, f);
                si_dump_gfx_descriptors(sctx, &sctx->tes_shader, f);
                si_dump_gfx_descriptors(sctx, &sctx->gs_shader, f);
                si_dump_gfx_descriptors(sctx, &sctx->ps_shader, f);
                si_dump_compute_descriptors(sctx, f);
        }
 
        if (flags & PIPE_DUMP_LAST_COMMAND_BUFFER) {
-- 
2.7.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to