radeonsi: enable BC_OPTIMIZE if centroid isn't used
authorMarek Olšák <marek.olsak@amd.com>
Sun, 18 Oct 2015 13:09:24 +0000 (15:09 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 20 Oct 2015 10:56:46 +0000 (12:56 +0200)
This solution was recommended by a Catalyst developer.

Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/drivers/radeonsi/si_state_shaders.c

index 8b26b943e004dacc9fc5a38181a5df4125bfa824..eea00e0fafcf5fce4c6151df52ca1af655bc8996 100644 (file)
@@ -404,6 +404,7 @@ static void si_shader_ps(struct si_shader *shader)
        unsigned num_sgprs, num_user_sgprs;
        unsigned spi_baryc_cntl = 0;
        uint64_t va;
+       bool has_centroid;
 
        pm4 = shader->pm4 = CALLOC_STRUCT(si_pm4_state);
 
@@ -435,8 +436,11 @@ static void si_shader_ps(struct si_shader *shader)
                }
        }
 
+       has_centroid = G_0286CC_PERSP_CENTROID_ENA(shader->spi_ps_input_ena) ||
+                      G_0286CC_LINEAR_CENTROID_ENA(shader->spi_ps_input_ena);
+
        spi_ps_in_control = S_0286D8_NUM_INTERP(shader->nparam) |
-               S_0286D8_BC_OPTIMIZE_DISABLE(1);
+                           S_0286D8_BC_OPTIMIZE_DISABLE(has_centroid);
 
        si_pm4_set_reg(pm4, R_0286E0_SPI_BARYC_CNTL, spi_baryc_cntl);
        si_pm4_set_reg(pm4, R_0286D8_SPI_PS_IN_CONTROL, spi_ps_in_control);