mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 20:38:06 +02:00
nir/print: Pretty-print I/O semantic locations
Instead of printing the raw location number, which is pretty hard to interpret, let's print the name of the location. Example output: vec4 16 ssa_2 = intrinsic load_interpolated_input (ssa_0, ssa_1) (base=0, component=0, dest_type=float16 /*144*/, io location=VARYING_SLOT_VAR0 slots=1 mediump /*8388768*/) One of the "regressions" from moving to purely lowered I/O with all variables removed is a lack of debuggability, since otherwise these location strings don't show up anywhere in the printed shader! By contrast this should make the lowered I/O nice to read like the early I/O. Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Acked-by: Marek Olšák <marek.olsak@amd.com> Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21091>
This commit is contained in:
parent
435e7f5e6d
commit
b235be1fd4
1 changed files with 27 additions and 1 deletions
|
|
@ -1053,7 +1053,33 @@ print_intrinsic_instr(nir_intrinsic_instr *instr, print_state *state)
|
|||
|
||||
case NIR_INTRINSIC_IO_SEMANTICS: {
|
||||
struct nir_io_semantics io = nir_intrinsic_io_semantics(instr);
|
||||
fprintf(fp, "io location=%u slots=%u", io.location, io.num_slots);
|
||||
|
||||
/* Try to figure out the mode so we can interpret the location */
|
||||
nir_variable_mode mode = nir_var_mem_generic;
|
||||
switch (instr->intrinsic) {
|
||||
case nir_intrinsic_load_input:
|
||||
case nir_intrinsic_load_interpolated_input:
|
||||
mode = nir_var_shader_in;
|
||||
break;
|
||||
|
||||
case nir_intrinsic_load_output:
|
||||
case nir_intrinsic_store_output:
|
||||
case nir_intrinsic_store_per_primitive_output:
|
||||
case nir_intrinsic_store_per_vertex_output:
|
||||
mode = nir_var_shader_out;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
/* Using that mode, we should be able to name the location */
|
||||
char buf[4];
|
||||
const char *loc = get_location_str(io.location,
|
||||
state->shader->info.stage, mode,
|
||||
buf);
|
||||
|
||||
fprintf(fp, "io location=%s slots=%u", loc, io.num_slots);
|
||||
|
||||
if (io.dual_source_blend_index)
|
||||
fprintf(fp, " dualsrc");
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue