Module: Mesa
Branch: master
Commit: 82b7ee62fc4bbe014f61a60bccf694b706c7247d
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=82b7ee62fc4bbe014f61a60bccf694b706c7247d

Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Tue Jan 13 16:38:52 2015 +0900

Revert "radeonsi: only set BC_OPTIMIZE_DISABLE when necessary"

This reverts commit 0543630d0b0d9d9f6eefbc14fbd3385d4de37ba0.

It caused flickering artifacts in Steam games such as Team Fortress 2 or
Left 4 Dead 2.

We could probably only enable this optimization by also making sure the
shader code only uses either SI_PARAM_LINEAR_CENTROID or
SI_PARAM_LINEAR_CENTER, not both. This would probably require a shader
variant.

Sorry I didn't remember this when reviewing the reverted change.

Reviewed-by: Marek Olšák <marek.ol...@amd.com>

---

 src/gallium/drivers/radeonsi/si_pipe.h          |    1 -
 src/gallium/drivers/radeonsi/si_state_shaders.c |   20 ++++++--------------
 2 files changed, 6 insertions(+), 15 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_pipe.h 
b/src/gallium/drivers/radeonsi/si_pipe.h
index dfb1cd6..6144fb1 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.h
+++ b/src/gallium/drivers/radeonsi/si_pipe.h
@@ -169,7 +169,6 @@ struct si_context {
        /* shader information */
        unsigned                        sprite_coord_enable;
        bool                            flatshade;
-       bool                            bc_optimize_disable;
        struct si_descriptors           vertex_buffers;
        struct si_buffer_resources      const_buffers[SI_NUM_SHADERS];
        struct si_buffer_resources      rw_buffers[SI_NUM_SHADERS];
diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c 
b/src/gallium/drivers/radeonsi/si_state_shaders.c
index 817a990..887680f 100644
--- a/src/gallium/drivers/radeonsi/si_state_shaders.c
+++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
@@ -232,7 +232,7 @@ static void si_shader_ps(struct si_shader *shader)
 {
        struct tgsi_shader_info *info = &shader->selector->info;
        struct si_pm4_state *pm4;
-       unsigned i;
+       unsigned i, spi_ps_in_control;
        unsigned num_sgprs, num_user_sgprs;
        unsigned spi_baryc_cntl = 0, spi_ps_input_ena;
        uint64_t va;
@@ -267,6 +267,9 @@ static void si_shader_ps(struct si_shader *shader)
                }
        }
 
+       spi_ps_in_control = S_0286D8_NUM_INTERP(shader->nparam) |
+               S_0286D8_BC_OPTIMIZE_DISABLE(1);
+
        si_pm4_set_reg(pm4, R_0286E0_SPI_BARYC_CNTL, spi_baryc_cntl);
        spi_ps_input_ena = shader->spi_ps_input_ena;
        /* we need to enable at least one of them, otherwise we hang the GPU */
@@ -281,6 +284,7 @@ static void si_shader_ps(struct si_shader *shader)
 
        si_pm4_set_reg(pm4, R_0286CC_SPI_PS_INPUT_ENA, spi_ps_input_ena);
        si_pm4_set_reg(pm4, R_0286D0_SPI_PS_INPUT_ADDR, spi_ps_input_ena);
+       si_pm4_set_reg(pm4, R_0286D8_SPI_PS_IN_CONTROL, spi_ps_in_control);
 
        si_pm4_set_reg(pm4, R_028710_SPI_SHADER_Z_FORMAT, 
shader->spi_shader_z_format);
        si_pm4_set_reg(pm4, R_028714_SPI_SHADER_COL_FORMAT,
@@ -661,10 +665,6 @@ bcolor:
                }
        }
 
-       si_pm4_set_reg(pm4, R_0286D8_SPI_PS_IN_CONTROL,
-                      S_0286D8_NUM_INTERP(ps->nparam) |
-                      S_0286D8_BC_OPTIMIZE_DISABLE(sctx->bc_optimize_disable));
-
        si_pm4_set_state(sctx, spi, pm4);
 }
 
@@ -710,7 +710,6 @@ void si_update_shaders(struct si_context *sctx)
 {
        struct pipe_context *ctx = (struct pipe_context*)sctx;
        struct si_state_rasterizer *rs = sctx->queued.named.rasterizer;
-       bool bc_optimize_disable;
 
        if (sctx->gs_shader) {
                si_shader_select(ctx, sctx->gs_shader);
@@ -775,18 +774,11 @@ void si_update_shaders(struct si_context *sctx)
 
        si_pm4_bind_state(sctx, ps, sctx->ps_shader->current->pm4);
 
-       /* Whether CENTER != CENTROID. */
-       bc_optimize_disable = sctx->framebuffer.nr_samples > 1 &&
-                             rs->multisample_enable &&
-                             sctx->ps_shader->info.uses_centroid;
-
        if (si_pm4_state_changed(sctx, ps) || si_pm4_state_changed(sctx, vs) ||
            sctx->sprite_coord_enable != rs->sprite_coord_enable ||
-           sctx->flatshade != rs->flatshade ||
-           sctx->bc_optimize_disable != bc_optimize_disable) {
+           sctx->flatshade != rs->flatshade) {
                sctx->sprite_coord_enable = rs->sprite_coord_enable;
                sctx->flatshade = rs->flatshade;
-               sctx->bc_optimize_disable = bc_optimize_disable;
                si_update_spi_map(sctx);
        }
 

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to