radeonsi: preload PS inputs only if KILL is used
authorMarek Olšák <marek.olsak@amd.com>
Thu, 19 Jan 2017 12:58:50 +0000 (13:58 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 23 Jan 2017 22:43:38 +0000 (23:43 +0100)
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 <nicolai.haehnle@amd.com>
src/gallium/drivers/radeonsi/si_shader_tgsi_setup.c

index 8d19a4eea685d37d502916352faa22651bb6665c..4f355e584902f34fda2ee8139509c9c6f34298af 100644 (file)
@@ -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