Hi Matt,

This is a temporary workaround and not a permanent fix. I think it's
not even correct for later GL versions (that we don't support yet).

I have mixed feelings about this patch, but we must fix the Unreal
Engine issues somehow and this is the best we've got and it's easy to
revert.

Marek

On Wed, Dec 10, 2014 at 11:35 PM, Matt Arsenault <[email protected]> wrote:
>
> On Dec 10, 2014, at 5:08 PM, Marek Olšák <[email protected]> wrote:
>
> From: Marek Olšák <[email protected]>
>
> This fixes incorrect rendering in Unreal Engine demos.
> I don't know why it's called "dx10 clamp mode". MSDN doesn't mention it.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=83510
>
>
> This should be set from the program binary, and not hardcoded this way. The
> compiler should probably change the default based on the shader type
>
>
> ---
> src/gallium/drivers/radeonsi/si_state_shaders.c | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c
> b/src/gallium/drivers/radeonsi/si_state_shaders.c
> index 3a5b0ae..355f8aa 100644
> --- a/src/gallium/drivers/radeonsi/si_state_shaders.c
> +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c
> @@ -64,7 +64,8 @@ static void si_shader_es(struct si_shader *shader)
> si_pm4_set_reg(pm4, R_00B328_SPI_SHADER_PGM_RSRC1_ES,
>       S_00B328_VGPRS((shader->num_vgprs - 1) / 4) |
>       S_00B328_SGPRS((num_sgprs - 1) / 8) |
> -       S_00B328_VGPR_COMP_CNT(vgpr_comp_cnt));
> +       S_00B328_VGPR_COMP_CNT(vgpr_comp_cnt) |
> +       S_00B328_DX10_CLAMP(1));
> si_pm4_set_reg(pm4, R_00B32C_SPI_SHADER_PGM_RSRC2_ES,
>       S_00B32C_USER_SGPR(num_user_sgprs));
> }
> @@ -132,7 +133,8 @@ static void si_shader_gs(struct si_shader *shader)
>
> si_pm4_set_reg(pm4, R_00B228_SPI_SHADER_PGM_RSRC1_GS,
>       S_00B228_VGPRS((shader->num_vgprs - 1) / 4) |
> -       S_00B228_SGPRS((num_sgprs - 1) / 8));
> +       S_00B228_SGPRS((num_sgprs - 1) / 8) |
> +       S_00B228_DX10_CLAMP(1));
> si_pm4_set_reg(pm4, R_00B22C_SPI_SHADER_PGM_RSRC2_GS,
>       S_00B22C_USER_SGPR(num_user_sgprs));
> }
> @@ -206,7 +208,8 @@ static void si_shader_vs(struct si_shader *shader)
> si_pm4_set_reg(pm4, R_00B128_SPI_SHADER_PGM_RSRC1_VS,
>       S_00B128_VGPRS((shader->num_vgprs - 1) / 4) |
>       S_00B128_SGPRS((num_sgprs - 1) / 8) |
> -       S_00B128_VGPR_COMP_CNT(vgpr_comp_cnt));
> +       S_00B128_VGPR_COMP_CNT(vgpr_comp_cnt) |
> +       S_00B128_DX10_CLAMP(1));
> si_pm4_set_reg(pm4, R_00B12C_SPI_SHADER_PGM_RSRC2_VS,
>       S_00B12C_USER_SGPR(num_user_sgprs) |
>       S_00B12C_SO_BASE0_EN(!!shader->selector->so.stride[0]) |
> @@ -304,7 +307,8 @@ static void si_shader_ps(struct si_shader *shader)
>
> si_pm4_set_reg(pm4, R_00B028_SPI_SHADER_PGM_RSRC1_PS,
>       S_00B028_VGPRS((shader->num_vgprs - 1) / 4) |
> -       S_00B028_SGPRS((num_sgprs - 1) / 8));
> +       S_00B028_SGPRS((num_sgprs - 1) / 8) |
> +       S_00B028_DX10_CLAMP(1));
> si_pm4_set_reg(pm4, R_00B02C_SPI_SHADER_PGM_RSRC2_PS,
>       S_00B02C_EXTRA_LDS_SIZE(shader->lds_size) |
>       S_00B02C_USER_SGPR(num_user_sgprs));
> --
> 2.1.0
>
> _______________________________________________
> mesa-dev mailing list
> [email protected]
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to