radeonsi: always allocate export memory for pixel shaders
Experiments with framebuffer-no-attachments type draw calls have shown that NULL exports stall terribly unless we ensure that export memory is allocated by the SPI. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
ad1782cfb5
commit
d8f3e8e626
|
@ -688,14 +688,19 @@ static void si_shader_ps(struct si_shader *shader)
|
||||||
spi_shader_col_format = si_get_spi_shader_col_format(shader);
|
spi_shader_col_format = si_get_spi_shader_col_format(shader);
|
||||||
cb_shader_mask = si_get_cb_shader_mask(spi_shader_col_format);
|
cb_shader_mask = si_get_cb_shader_mask(spi_shader_col_format);
|
||||||
|
|
||||||
/* This must be non-zero for alpha-test/kill to work.
|
/* Ensure that some export memory is always allocated, for two reasons:
|
||||||
* The hardware ignores the EXEC mask if no export memory is allocated.
|
*
|
||||||
|
* 1) Correctness: The hardware ignores the EXEC mask if no export
|
||||||
|
* memory is allocated, so KILL and alpha test do not work correctly
|
||||||
|
* without this.
|
||||||
|
* 2) Performance: Every shader needs at least a NULL export, even when
|
||||||
|
* it writes no color/depth output. The NULL export instruction
|
||||||
|
* stalls without this setting.
|
||||||
|
*
|
||||||
* Don't add this to CB_SHADER_MASK.
|
* Don't add this to CB_SHADER_MASK.
|
||||||
*/
|
*/
|
||||||
if (!spi_shader_col_format &&
|
if (!spi_shader_col_format &&
|
||||||
!info->writes_z && !info->writes_stencil && !info->writes_samplemask &&
|
!info->writes_z && !info->writes_stencil && !info->writes_samplemask)
|
||||||
(shader->selector->info.uses_kill ||
|
|
||||||
shader->key.ps.epilog.alpha_func != PIPE_FUNC_ALWAYS))
|
|
||||||
spi_shader_col_format = V_028714_SPI_SHADER_32_R;
|
spi_shader_col_format = V_028714_SPI_SHADER_32_R;
|
||||||
|
|
||||||
si_pm4_set_reg(pm4, R_0286CC_SPI_PS_INPUT_ENA, input_ena);
|
si_pm4_set_reg(pm4, R_0286CC_SPI_PS_INPUT_ENA, input_ena);
|
||||||
|
|
Loading…
Reference in New Issue