On Mon, Apr 4, 2016 at 2:09 PM, Kenneth Graunke <[email protected]> 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: [email protected] > Cc: Ilia Mirkin <[email protected]> > Signed-off-by: Kenneth Graunke <[email protected]> > --- > .../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
DIV_ROUND_UP(ctx->Const.MaxSamples, 32) hopefully. [Unless ceil does something I don't know about.] > + * 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 Still 1 at 32x MSAA. Would be 2 at a (hypothetical) 33x MSAA or more probable 64x MSAA. With the comment adjusted to better reflect reality, Reviewed-by: Ilia Mirkin <[email protected]> > + * 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-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
