[Mesa-dev] [Mesa-stable] [PATCH v2] glsl: Lower variable indexing of system value arrays unconditionally.

Ian Romanick idr at freedesktop.org
Mon Apr 4 20:55:21 UTC 2016


It might be worth having an assertion in case we either add another such 
variable in the future or the tess lowering pass somehow fails.

Either way is

Reviewed-by: Ian Romanick<Ian.d.romanick at intel.com>


On April 4, 2016 11:09:44 AM Kenneth Graunke <kenneth at whitecape.org> wrote:

> lower_variable_index_to_cond_assign() did not handle system values.
> gl_SampleMaskIn[] is a system value, and also an array.  Accessing it
> with a variable index would trigger an unreachable() assert.
>
> Rather than adding a new EmitNoIndirectSystemValues flag, we simply
> lower unconditionally.  There is exactly one case where this occurs,
> and for all current drivers, lowering produces optimal code.  Even
> for future drivers with 32x MSAA, it produces reasonable code.
>
> Fixes Piglit's new samplemaskin-indirect test.  Also fixes many ES31-CTS
> tests when OES_sample_variables is enabled.
>
> Cc: mesa-stable at lists.freedesktop.org
> Cc: Ilia Mirkin <imirkin at alum.mit.edu>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
>  .../glsl/lower_variable_index_to_cond_assign.cpp     | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
>
> diff --git a/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp 
> b/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp
> index 278d545..057de31 100644
> --- a/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp
> +++ b/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp
> @@ -385,6 +385,26 @@ public:
>        case ir_var_const_in:
>           return this->lower_temps;
>
> +      case ir_var_system_value:
> +         /* There are only a few system values that have array types:
> +          *
> +          *    gl_TessLevelInner[]
> +          *    gl_TessLevelOuter[]
> +          *    gl_SampleMaskIn[]
> +          *
> +          * The tessellation factor arrays are lowered to vec4/vec2s
> +          * by lower_tess_level() before this pass occurs, so we'll
> +          * never see them here.
> +          *
> +          * The only remaining case is gl_SampleMaskIn[], which has
> +          * a length of ceil(ctx->Const.MaxSamples, 32).  Most hardware
> +          * supports fewer than 32 samples, at which point our lowering
> +          * produces a single read of gl_SampleMaskIn[0].  Even with 32x
> +          * MSAA, the array length is only 2, so the lowering is fairly
> +          * efficient.  Therefore, lower unconditionally.
> +          */
> +         return true;
> +
>        case ir_var_shader_in:
>           /* The input array size is unknown at compiler time for non-patch
>            * inputs in TCS and TES. The arrays are sized to
> --
> 2.7.4
>
> _______________________________________________
> mesa-stable mailing list
> mesa-stable at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-stable




More information about the mesa-dev mailing list