aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2016-07-05 02:54:43 +0200
committerMarek Olšák <[email protected]>2016-07-13 19:46:16 +0200
commit0f7a6ea5e7b95cfe10dd5c176858ca078b36a197 (patch)
tree221ce344bdb90043c5111f14a93acb9b832c0490 /src/gallium
parentd227dbe2721728c89acc6495bf657cb9fc4d3c69 (diff)
radeonsi: report accurate SGPR and VGPR spills
Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/radeonsi/si_shader.c18
-rw-r--r--src/gallium/drivers/radeonsi/si_shader.h2
2 files changed, 15 insertions, 5 deletions
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index 64fbd74cb44..41bcbd4fc3d 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -5956,6 +5956,12 @@ void si_shader_binary_read_config(struct radeon_shader_binary *binary,
conf->scratch_bytes_per_wave =
G_00B860_WAVESIZE(value) * 256 * 4;
break;
+ case 0x4: /* SPILLED_SGPRS */
+ conf->spilled_sgprs = value;
+ break;
+ case 0x8: /* SPILLED_VGPRS */
+ conf->spilled_vgprs = value;
+ break;
default:
{
static bool printed;
@@ -6119,8 +6125,6 @@ static void si_shader_dump_stats(struct si_screen *sscreen,
unsigned lds_increment = sscreen->b.chip_class >= CIK ? 512 : 256;
unsigned lds_per_wave = 0;
unsigned max_simd_waves = 10;
- /* Assuming SGPRs aren't spilled. */
- unsigned spilled_vgprs = conf->scratch_bytes_per_wave / 64 / 4;
/* Compute LDS usage for PS. */
if (processor == PIPE_SHADER_FRAGMENT) {
@@ -6167,23 +6171,27 @@ static void si_shader_dump_stats(struct si_screen *sscreen,
fprintf(file, "*** SHADER STATS ***\n"
"SGPRS: %d\n"
"VGPRS: %d\n"
+ "Spilled SGPRs: %d\n"
"Spilled VGPRs: %d\n"
"Code Size: %d bytes\n"
"LDS: %d blocks\n"
"Scratch: %d bytes per wave\n"
"Max Waves: %d\n"
"********************\n",
- conf->num_sgprs, conf->num_vgprs, spilled_vgprs, code_size,
+ conf->num_sgprs, conf->num_vgprs,
+ conf->spilled_sgprs, conf->spilled_vgprs, code_size,
conf->lds_size, conf->scratch_bytes_per_wave,
max_simd_waves);
}
pipe_debug_message(debug, SHADER_INFO,
"Shader Stats: SGPRS: %d VGPRS: %d Code Size: %d "
- "LDS: %d Scratch: %d Max Waves: %d Spilled VGPRs: %d",
+ "LDS: %d Scratch: %d Max Waves: %d Spilled SGPRs: %d "
+ "Spilled VGPRs: %d",
conf->num_sgprs, conf->num_vgprs, code_size,
conf->lds_size, conf->scratch_bytes_per_wave,
- max_simd_waves, spilled_vgprs);
+ max_simd_waves, conf->spilled_sgprs,
+ conf->spilled_vgprs);
}
static const char *si_get_shader_name(struct si_shader *shader,
diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h
index 8fc0a36abbc..29069316548 100644
--- a/src/gallium/drivers/radeonsi/si_shader.h
+++ b/src/gallium/drivers/radeonsi/si_shader.h
@@ -397,6 +397,8 @@ union si_shader_key {
struct si_shader_config {
unsigned num_sgprs;
unsigned num_vgprs;
+ unsigned spilled_sgprs;
+ unsigned spilled_vgprs;
unsigned lds_size;
unsigned spi_ps_input_ena;
unsigned spi_ps_input_addr;