freedreno/decode: Dump filtered bindless descriptors by default

Now that we can use info from the shaders to better determine which
possible interpretation of a descriptor is (or might be) used, we can
dump descriptor decoding by default without causing a massive spam of
incorrect/impossible descriptor decoding.

The old arg is repurposed to show all descriptors (ie. the previous
behavior).

Signed-off-by: Rob Clark <rob.clark@oss.qualcomm.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39636>
This commit is contained in:
Rob Clark 2026-01-29 10:55:52 -08:00 committed by Marge Bot
parent 8efbe73f3f
commit 9dbdcb6d53
6 changed files with 26070 additions and 6 deletions

View file

@ -1638,6 +1638,9 @@ static bool
show_descriptor(uint32_t *desc, int sizedwords, int base, int idx,
const char *domain, const char *type)
{
if (options->dump_all_bindless)
return true;
struct rnndomain *dom = rnn_finddomain(rnn->db, domain);
/* Earlier gens don't have bindless, or use descriptor variants. And
@ -1741,9 +1744,6 @@ dump_tex_const(uint32_t *texconst, int num_unit, int level)
static void
dump_bindless_descriptors(bool is_compute, int level)
{
if (!options->dump_bindless)
return;
/* Skip for devices which do not support bindless: */
if (options->info->chip < 6)
return;

View file

@ -35,7 +35,7 @@ struct cffdec_options {
int summary;
int allregs;
int dump_textures;
int dump_bindless;
int dump_all_bindless;
int decode_markers;
char *script;

View file

@ -105,7 +105,7 @@ static const struct option opts[] = {
{ "no-pager", no_argument, &interactive, 0 },
{ "pager", no_argument, &interactive, 1 },
{ "textures", no_argument, &options.dump_textures, 1 },
{ "bindless", no_argument, &options.dump_bindless, 1 },
{ "bindless", no_argument, &options.dump_all_bindless, 1 },
{ "show-compositor", no_argument, &show_comp, 1 },
{ "query-all", no_argument, &options.query_mode, QUERY_ALL },
{ "query-written", no_argument, &options.query_mode, QUERY_WRITTEN },

View file

@ -243,7 +243,7 @@ if with_tests
log = custom_target(name + '.log',
output: name + '.log',
command: [cffdump, '--unit-test', '--bindless', args, files('../tests/traces/' + name + '.rd.gz')],
command: [cffdump, '--unit-test', args, files('../tests/traces/' + name + '.rd.gz')],
capture: true,
)
test('cffdump-' + name,

View file

@ -8715,6 +8715,12 @@ got cmdszdw=38
{ NUM_INDICES = 6 }
mode: RM6_DIRECT_RENDER
skip_ib2: g=0, l=0
draw[11] bindless descriptors
set[0]:
set[1]:
set[2]:
set[3]:
set[4]:
draw[11] register values
!+ 000000c0 GRAS_CL_CNTL: { ZERO_GB_SCALE_Z | VP_CLIP_CODE_IGNORE }
+ 00000000 GRAS_CL_VS_CLIP_CULL_DISTANCE: { CLIP_MASK = 0 | CULL_MASK = 0 }
@ -9398,6 +9404,12 @@ got cmdszdw=38
{ NUM_INDICES = 6 }
mode: RM6_DIRECT_RENDER
skip_ib2: g=0, l=0
draw[15] bindless descriptors
set[0]:
set[1]:
set[2]:
set[3]:
set[4]:
draw[15] register values
+ 000000c0 GRAS_CL_CNTL: { ZERO_GB_SCALE_Z | VP_CLIP_CODE_IGNORE }
+ 00000000 GRAS_CL_VS_CLIP_CULL_DISTANCE: { CLIP_MASK = 0 | CULL_MASK = 0 }
@ -10091,6 +10103,12 @@ got cmdszdw=38
{ NUM_INDICES = 6 }
mode: RM6_DIRECT_RENDER
skip_ib2: g=0, l=0
draw[19] bindless descriptors
set[0]:
set[1]:
set[2]:
set[3]:
set[4]:
draw[19] register values
+ 000000c0 GRAS_CL_CNTL: { ZERO_GB_SCALE_Z | VP_CLIP_CODE_IGNORE }
+ 00000000 GRAS_CL_VS_CLIP_CULL_DISTANCE: { CLIP_MASK = 0 | CULL_MASK = 0 }
@ -10708,6 +10726,12 @@ ESTIMATED CRASH LOCATION!
{ NUM_INDICES = 6 }
mode: RM6_DIRECT_RENDER
skip_ib2: g=0, l=0
draw[20] bindless descriptors
set[0]:
set[1]:
set[2]:
set[3]:
set[4]:
draw[20] register values
+ 000000c0 GRAS_CL_CNTL: { ZERO_GB_SCALE_Z | VP_CLIP_CODE_IGNORE }
+ 00000000 GRAS_CL_VS_CLIP_CULL_DISTANCE: { CLIP_MASK = 0 | CULL_MASK = 0 }

File diff suppressed because it is too large Load diff