freedreno/ir3: Dump const state with shader disasm
authorRob Clark <robdclark@chromium.org>
Sat, 4 Dec 2021 00:29:13 +0000 (16:29 -0800)
committerMarge Bot <emma+marge@anholt.net>
Mon, 20 Dec 2021 19:47:35 +0000 (19:47 +0000)
Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14231>

src/freedreno/ir3/ir3_shader.c

index 4be8c41..c81ff1e 100644 (file)
@@ -655,6 +655,49 @@ output_name(struct ir3_shader_variant *so, int i)
    }
 }
 
+static void
+dump_const_state(struct ir3_shader_variant *so, FILE *out)
+{
+   const struct ir3_const_state *cs = ir3_const_state(so);
+   const struct ir3_ubo_analysis_state *us = &cs->ubo_state;
+
+   fprintf(out, "; num_ubos:           %u\n", cs->num_ubos);
+   fprintf(out, "; num_driver_params:  %u\n", cs->num_driver_params);
+   fprintf(out, "; offsets:\n");
+   if (cs->offsets.ubo != ~0)
+      fprintf(out, ";   ubo:              c%u.x\n", cs->offsets.ubo);
+   if (cs->offsets.image_dims != ~0)
+      fprintf(out, ";   image_dims:       c%u.x\n", cs->offsets.image_dims);
+   if (cs->offsets.kernel_params != ~0)
+      fprintf(out, ";   kernel_params:    c%u.x\n", cs->offsets.kernel_params);
+   if (cs->offsets.driver_param != ~0)
+      fprintf(out, ";   driver_param:     c%u.x\n", cs->offsets.driver_param);
+   if (cs->offsets.tfbo != ~0)
+      fprintf(out, ";   tfbo:             c%u.x\n", cs->offsets.tfbo);
+   if (cs->offsets.primitive_param != ~0)
+      fprintf(out, ";   primitive_params: c%u.x\n", cs->offsets.primitive_param);
+   if (cs->offsets.primitive_map != ~0)
+      fprintf(out, ";   primitive_map:    c%u.x\n", cs->offsets.primitive_map);
+   fprintf(out, "; ubo_state:\n");
+   fprintf(out, ";   num_enabled:      %u\n", us->num_enabled);
+   for (unsigned i = 0; i < us->num_enabled; i++) {
+      const struct ir3_ubo_range *r = &us->range[i];
+
+      assert((r->offset % 16) == 0);
+
+      fprintf(out, ";   range[%u]:\n", i);
+      fprintf(out, ";     block:          %u\n", r->ubo.block);
+      if (r->ubo.bindless)
+         fprintf(out, ";     bindless_base:  %u\n", r->ubo.bindless_base);
+      fprintf(out, ";     offset:         c%u.x\n", r->offset/16);
+
+      unsigned size = r->end - r->start;
+      assert((size % 16) == 0);
+
+      fprintf(out, ";     size:           %u vec4 (%ub -> %ub)\n", (size/16), r->start, r->end);
+   }
+}
+
 void
 ir3_shader_disasm(struct ir3_shader_variant *so, uint32_t *bin, FILE *out)
 {
@@ -664,6 +707,8 @@ ir3_shader_disasm(struct ir3_shader_variant *so, uint32_t *bin, FILE *out)
    uint8_t regid;
    unsigned i;
 
+   dump_const_state(so, out);
+
    foreach_input_n (instr, i, ir) {
       reg = instr->dsts[0];
       regid = reg->num;