Skip to content

compiler/glsl: Propagate invariant/precise when splitting arrays

This fixes the dEQP-GLES3.functional.shaders.invariance.{low,medium,high}p.loop_4 tests when run in a VM with virgl on a host with iris. virgl mangles the GLSL shaders and emits shader code for the host driver that contains vec4 arrays. As such, the test did not fail when running directly on the host.

The test also did not fail if the host was using i965. Disabling PIPE_CAP_GLSL_OPTIMIZE_CONSERVATIVELY in iris was sufficient to work around it, so I believe that i965 didn't show the problem because after arrays were split by optimize_split_arrays(), even though the invariant/precise qualifiers were lost, do_common_optimization() would be called again and thus propagate_invariance() would propagate the qualifiers to the new variables produced by optimize_split_arrays().

cc: @idr, @kwg, @chadversary

Merge request reports