aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2019-06-26 22:57:10 -0400
committerMarek Olšák <[email protected]>2019-07-09 17:24:16 -0400
commitfbf781e401ca648a2fcad6dd3bbd2bca28466b85 (patch)
treea70617bd02a20b4556b3e4a7781c2977ae053a35
parent2adc8e273667aca5499bb4c33e68eeb2c7d0654a (diff)
radeonsi/gfx10: support pixel shaders without exports
It only works if there are not color and no Z exports. Acked-by: Pierre-Eric Pelloux-Prayer <[email protected]> Acked-by: Dave Airlie <[email protected]>
-rw-r--r--src/gallium/drivers/radeonsi/si_state_shaders.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c
index 380533b94dc..3b95ed5d7ab 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -1587,8 +1587,15 @@ static void si_shader_ps(struct si_screen *sscreen, struct si_shader *shader)
* stalls without this setting.
*
* Don't add this to CB_SHADER_MASK.
+ *
+ * GFX10 supports pixel shaders without exports by setting both
+ * the color and Z formats to SPI_SHADER_ZERO. The hw will skip export
+ * instructions if any are present.
*/
- if (!spi_shader_col_format &&
+ if ((sscreen->info.chip_class <= GFX9 ||
+ info->uses_kill ||
+ shader->key.part.ps.epilog.alpha_func != PIPE_FUNC_ALWAYS) &&
+ !spi_shader_col_format &&
!info->writes_z && !info->writes_stencil && !info->writes_samplemask)
spi_shader_col_format = V_028714_SPI_SHADER_32_R;