ac,radeonsi: add a helper to print PS input VGPR layout

This commit is contained in:
Marek Olšák 2026-04-26 22:42:55 -04:00
parent 15774f7ac9
commit 316353fbb6
3 changed files with 53 additions and 2 deletions

View file

@ -1511,3 +1511,50 @@ retry_select_mode:
max_out_vertices <= max_workgroup_size &&
out->hw_max_esverts >= min_esverts;
}
/* Print SPI_PS_INPUT_ADDR as follows:
* v[0:1] = PERSP_SAMPLE
* v[2:3] = PERSP_CENTER
* v[4:5] = LINEAR_SAMPLE
* v[6:7] = LINEAR_CENTER
* v8 = LINE_STIPPLE_TEX
* v9 = FRONT_FACE
* v10 = ANCILLARY
* v11 = SAMPLE_COVERAGE
* v12 = POS_FIXED_PT
*/
void
ac_print_spi_ps_input_vgpr_list(uint32_t spi_ps_input_ena, uint32_t spi_ps_input_addr, FILE *f)
{
unsigned vgpr = 0;
#define PRINT_PS_INPUT_VGPR(count, name) do { \
if (G_0286CC_##name##_ENA(spi_ps_input_addr)) { \
bool enabled = G_0286CC_##name##_ENA(spi_ps_input_ena); \
if (count > 1) \
fprintf(f, " v[%u:%u] = %s%s\n", vgpr, vgpr + count - 1, #name, \
enabled ? " === initialized ===" : ""); \
else \
fprintf(f, " v%u = %s\n", vgpr, #name); \
vgpr += count; \
} \
} while (0)
PRINT_PS_INPUT_VGPR(2, PERSP_SAMPLE);
PRINT_PS_INPUT_VGPR(2, PERSP_CENTER);
PRINT_PS_INPUT_VGPR(2, PERSP_CENTROID);
PRINT_PS_INPUT_VGPR(3, PERSP_PULL_MODEL);
PRINT_PS_INPUT_VGPR(2, LINEAR_SAMPLE);
PRINT_PS_INPUT_VGPR(2, LINEAR_CENTER);
PRINT_PS_INPUT_VGPR(2, LINEAR_CENTROID);
PRINT_PS_INPUT_VGPR(1, LINE_STIPPLE_TEX);
PRINT_PS_INPUT_VGPR(1, POS_X_FLOAT);
PRINT_PS_INPUT_VGPR(1, POS_Y_FLOAT);
PRINT_PS_INPUT_VGPR(1, POS_Z_FLOAT);
PRINT_PS_INPUT_VGPR(1, POS_W_FLOAT);
PRINT_PS_INPUT_VGPR(1, FRONT_FACE);
PRINT_PS_INPUT_VGPR(1, ANCILLARY);
PRINT_PS_INPUT_VGPR(1, SAMPLE_COVERAGE);
PRINT_PS_INPUT_VGPR(1, POS_FIXED_PT);
#undef PRINT_PS_INPUT_VGPR
}

View file

@ -343,6 +343,9 @@ ac_ngg_compute_subgroup_info(enum amd_gfx_level gfx_level, mesa_shader_stage es_
unsigned ngg_lds_scratch_size, bool tess_turns_off_ngg,
unsigned max_esgs_lds_padding, ac_ngg_subgroup_info *out);
void
ac_print_spi_ps_input_vgpr_list(uint32_t spi_ps_input_ena, uint32_t spi_ps_input_addr, FILE *f);
static unsigned inline
ac_shader_get_lds_alloc_granularity(enum amd_gfx_level gfx_level)
{

View file

@ -491,9 +491,10 @@ static void si_shader_dump_stats(struct si_screen *sscreen, struct si_shader *sh
if (shader->selector->stage == MESA_SHADER_FRAGMENT) {
fprintf(file,
"*** SHADER CONFIG ***\n"
"SPI_PS_INPUT_ADDR = 0x%04x\n"
"SPI_PS_INPUT_ENA = 0x%04x\n",
"SPI_PS_INPUT_ADDR = 0x%04x\n"
"SPI_PS_INPUT_ENA = 0x%04x\n",
conf->spi_ps_input_addr, conf->spi_ps_input_ena);
ac_print_spi_ps_input_vgpr_list(conf->spi_ps_input_ena, conf->spi_ps_input_addr, file);
}
fprintf(file,