[Mesa-dev] [PATCH] r600g: fix lockup when hyperz & alpha test are enabled together.

Marek Olšák maraeo at gmail.com
Fri Feb 8 13:31:57 PST 2013


Reviewed-by: Marek Olšák <maraeo at gmail.com>

Please cherry-pick this to the 9.1 branch (cherry-picks for Mesa
should be done with the -x parameter).

Marek

On Fri, Feb 8, 2013 at 10:02 PM,  <j.glisse at gmail.com> wrote:
> From: Jerome Glisse <jglisse at redhat.com>
>
> Seems that alpha test being enabled confuse the GPU on the order in
> which it should perform the Z testing. So force the order programmed
> throught db shader control.
>
> Signed-off-by: Jerome Glisse <jglisse at redhat.com>
> ---
>  src/gallium/drivers/r600/evergreen_state.c | 5 +++++
>  src/gallium/drivers/r600/r600_state.c      | 5 +++++
>  2 files changed, 10 insertions(+)
>
> diff --git a/src/gallium/drivers/r600/evergreen_state.c b/src/gallium/drivers/r600/evergreen_state.c
> index 211c218..a610b69 100644
> --- a/src/gallium/drivers/r600/evergreen_state.c
> +++ b/src/gallium/drivers/r600/evergreen_state.c
> @@ -2251,6 +2251,11 @@ static void evergreen_emit_db_misc_state(struct r600_context *rctx, struct r600_
>         if (rctx->db_state.rsurf && rctx->db_state.rsurf->htile_enabled) {
>                 /* FORCE_OFF means HiZ/HiS are determined by DB_SHADER_CONTROL */
>                 db_render_override |= S_02800C_FORCE_HIZ_ENABLE(V_02800C_FORCE_OFF);
> +               /* This is to fix a lockup when hyperz and alpha test are enabled at
> +                * the same time some how GPU get confuse on which order to pick for
> +                * z test
> +                */
> +               db_render_override |= S_02800C_FORCE_SHADER_Z_ORDER(1);
>         } else {
>                 db_render_override |= S_02800C_FORCE_HIZ_ENABLE(V_02800C_FORCE_DISABLE);
>         }
> diff --git a/src/gallium/drivers/r600/r600_state.c b/src/gallium/drivers/r600/r600_state.c
> index 67c4d99..2760f19 100644
> --- a/src/gallium/drivers/r600/r600_state.c
> +++ b/src/gallium/drivers/r600/r600_state.c
> @@ -1966,6 +1966,11 @@ static void r600_emit_db_misc_state(struct r600_context *rctx, struct r600_atom
>         if (rctx->db_state.rsurf && rctx->db_state.rsurf->htile_enabled) {
>                 /* FORCE_OFF means HiZ/HiS are determined by DB_SHADER_CONTROL */
>                 db_render_override |= S_028D10_FORCE_HIZ_ENABLE(V_028D10_FORCE_OFF);
> +               /* This is to fix a lockup when hyperz and alpha test are enabled at
> +                * the same time some how GPU get confuse on which order to pick for
> +                * z test
> +                */
> +               db_render_override |= S_028D10_FORCE_SHADER_Z_ORDER(1);
>         } else {
>                 db_render_override |= S_028D10_FORCE_HIZ_ENABLE(V_028D10_FORCE_DISABLE);
>         }
> --
> 1.7.11.7
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list