summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2017-01-19 13:58:50 +0100
committerMarek Olšák <[email protected]>2017-01-23 23:43:38 +0100
commit59c5da40ed2c6c56e29b562c2ee2c8705f28738b (patch)
treeb9c4724a266619dfa2ef52ea6a77e776a27c1162 /src/gallium
parent7b32ae4df5bc19c378598d6a950a6019fa64ece6 (diff)
radeonsi: preload PS inputs only if KILL is used
so that most shaders can get lower VGPR usage thanks to lazy input loading. I think this is a more accurate constraint that prevents the black transitions in Witcher 2. Affected shaders (7758): Max Waves: 57437 -> 58231 (1.38 %) Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c
index 8d19a4eea68..4f355e58490 100644
--- a/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c
+++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c
@@ -637,11 +637,15 @@ store_value_to_array(struct lp_build_tgsi_context *bld_base,
/* If this is true, preload FS inputs at the beginning of shaders. Otherwise,
* reload them at each use. This must be true if the shader is using
- * derivatives, because all inputs should be loaded in the WQM mode.
+ * derivatives and KILL, because KILL can leave the WQM and then a lazy
+ * input load isn't in the WQM anymore.
*/
static bool si_preload_fs_inputs(struct si_shader_context *ctx)
{
- return ctx->shader->selector->info.uses_derivatives;
+ struct si_shader_selector *sel = ctx->shader->selector;
+
+ return sel->info.uses_derivatives &&
+ sel->info.uses_kill;
}
static LLVMValueRef