Module: Mesa
Branch: main
Commit: 4474c46f5f3fde1e5699bb03347074a1bb32c40a
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4474c46f5f3fde1e5699bb03347074a1bb32c40a

Author: Emma Anholt <[email protected]>
Date:   Fri Sep 17 10:50:32 2021 -0700

mesa/st: Allow loops in GLSL when NIR is enabled, even if the HW can't.

The jump lowering enabled by EmitNoLoops breaks GLSL's loop unrolling on
various obviously unrollable loops, resulting in a lot of deqp-gles2 and
piglit failures.  NIR will help unroll whatever GLSL doesn't, so we can
trust the driver to apply that after GLSL's unrolling, so no need to ask
GLSL to lower all loops.

Fixes: #4979
Reviewed-by: Ian Romanick <[email protected]>
Reviewed-by: Zoltán Böszörményi <[email protected]>
Reviewed-by: Marek Olšák <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12917>

---

 .../drivers/i915/ci/deqp-i915-g33-fails.txt        | 106 +--------------------
 .../drivers/i915/ci/piglit-i915-g33-fails.txt      |  32 -------
 src/gallium/drivers/i915/ci/traces-i915.yml        |   2 +-
 src/mesa/state_tracker/st_extensions.c             |   9 +-
 4 files changed, 14 insertions(+), 135 deletions(-)

diff --git a/src/gallium/drivers/i915/ci/deqp-i915-g33-fails.txt 
b/src/gallium/drivers/i915/ci/deqp-i915-g33-fails.txt
index c7c219958d3..4cd540a76e1 100644
--- a/src/gallium/drivers/i915/ci/deqp-i915-g33-fails.txt
+++ b/src/gallium/drivers/i915/ci/deqp-i915-g33-fails.txt
@@ -50,118 +50,32 @@ 
dEQP-GLES2.functional.rasterization.primitives.lines_wide,Fail
 # https://gitlab.freedesktop.org/mesa/mesa/-/issues/4980
 dEQP-GLES2.functional.shaders.builtin_variable.frontfacing,Fail
 
-dEQP-GLES2.functional.shaders.discard.function_static_loop_always,Fail
-dEQP-GLES2.functional.shaders.discard.function_static_loop_dynamic,Fail
-dEQP-GLES2.functional.shaders.discard.function_static_loop_texture,Fail
-dEQP-GLES2.functional.shaders.discard.function_static_loop_uniform,Fail
-dEQP-GLES2.functional.shaders.discard.static_loop_always,Fail
-dEQP-GLES2.functional.shaders.discard.static_loop_dynamic,Fail
-dEQP-GLES2.functional.shaders.discard.static_loop_texture,Fail
-dEQP-GLES2.functional.shaders.discard.static_loop_uniform,Fail
 
dEQP-GLES2.functional.shaders.functions.control_flow.mixed_return_break_continue_fragment,Fail
-dEQP-GLES2.functional.shaders.functions.control_flow.return_after_break_fragment,Fail
 
dEQP-GLES2.functional.shaders.functions.control_flow.return_after_continue_fragment,Fail
-dEQP-GLES2.functional.shaders.functions.control_flow.return_after_loop_fragment,Fail
 
dEQP-GLES2.functional.shaders.functions.control_flow.return_in_loop_if_fragment,Fail
 
dEQP-GLES2.functional.shaders.functions.control_flow.return_in_nested_loop_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat2_static_loop_write_static_loop_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat2_static_loop_write_static_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat2_static_write_static_loop_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat3_static_loop_write_static_loop_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat3_static_loop_write_static_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat3_static_write_static_loop_read_fragment,Fail
 
dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_dynamic_write_dynamic_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_static_loop_write_static_loop_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_static_loop_write_static_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.matrix_subscript.mat4_static_write_static_loop_read_fragment,Fail
 
dEQP-GLES2.functional.shaders.indexing.tmp_array.float_const_write_dynamic_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.float_const_write_static_loop_read_fragment,Fail
 
dEQP-GLES2.functional.shaders.indexing.tmp_array.float_dynamic_write_dynamic_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.float_static_loop_write_static_loop_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.float_static_loop_write_static_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.float_static_write_static_loop_read_fragment,Fail
 
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec2_const_write_dynamic_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.vec2_const_write_static_loop_read_fragment,Fail
 
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec2_dynamic_write_dynamic_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.vec2_static_loop_write_static_loop_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.vec2_static_loop_write_static_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.vec2_static_write_static_loop_read_fragment,Fail
 
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_const_write_dynamic_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_const_write_static_loop_read_fragment,Fail
 
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_dynamic_write_dynamic_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_static_loop_write_static_loop_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_static_loop_write_static_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.vec3_static_write_static_loop_read_fragment,Fail
 
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_const_write_dynamic_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_const_write_static_loop_read_fragment,Fail
 
dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_dynamic_write_dynamic_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_static_loop_write_static_loop_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_static_loop_write_static_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.tmp_array.vec4_static_write_static_loop_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.uniform_array.float_static_loop_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.uniform_array.vec2_static_loop_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.uniform_array.vec3_static_loop_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.uniform_array.vec4_static_loop_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.varying_array.float_static_loop_write_static_loop_read,Fail
-dEQP-GLES2.functional.shaders.indexing.varying_array.float_static_write_static_loop_read,Fail
-dEQP-GLES2.functional.shaders.indexing.varying_array.vec2_static_loop_write_static_loop_read,Fail
-dEQP-GLES2.functional.shaders.indexing.varying_array.vec2_static_write_static_loop_read,Fail
-dEQP-GLES2.functional.shaders.indexing.varying_array.vec3_static_loop_write_static_loop_read,Fail
-dEQP-GLES2.functional.shaders.indexing.varying_array.vec3_static_write_static_loop_read,Fail
-dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_static_loop_write_static_loop_read,Fail
-dEQP-GLES2.functional.shaders.indexing.varying_array.vec4_static_write_static_loop_read,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec2_component_write_static_loop_subscript_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec2_direct_write_static_loop_subscript_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec2_static_loop_subscript_write_component_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec2_static_loop_subscript_write_direct_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec2_static_loop_subscript_write_static_loop_subscript_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec2_static_loop_subscript_write_static_subscript_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec2_static_subscript_write_static_loop_subscript_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec3_component_write_static_loop_subscript_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec3_direct_write_static_loop_subscript_read_fragment,Fail
+
 
dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec3_dynamic_subscript_write_dynamic_subscript_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec3_static_loop_subscript_write_component_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec3_static_loop_subscript_write_direct_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec3_static_loop_subscript_write_static_loop_subscript_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec3_static_loop_subscript_write_static_subscript_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec3_static_subscript_write_static_loop_subscript_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_component_write_static_loop_subscript_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_direct_write_static_loop_subscript_read_fragment,Fail
+dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_dynamic_subscript_write_static_loop_subscript_read_fragment,Fail
 
dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_dynamic_subscript_write_component_read_fragment,Fail
 
dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_dynamic_subscript_write_direct_read_fragment,Fail
 
dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_dynamic_subscript_write_dynamic_subscript_read_fragment,Fail
 
dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_dynamic_subscript_write_static_subscript_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_static_loop_subscript_write_component_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_static_loop_subscript_write_direct_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_static_loop_subscript_write_static_loop_subscript_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_static_loop_subscript_write_static_subscript_read_fragment,Fail
-dEQP-GLES2.functional.shaders.indexing.vector_subscript.vec4_static_subscript_write_static_loop_subscript_read_fragment,Fail
+
 
dEQP-GLES2.functional.shaders.loops.for_constant_iterations.101_iterations_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.basic_highp_float_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.basic_highp_int_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.basic_lowp_float_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.basic_lowp_int_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.basic_mediump_float_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.basic_mediump_int_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.compound_statement_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.conditional_body_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.conditional_break_fragment,Fail
 
dEQP-GLES2.functional.shaders.loops.for_constant_iterations.conditional_continue_fragment,Fail
 
dEQP-GLES2.functional.shaders.loops.for_constant_iterations.double_continue_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.function_call_inout_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.function_call_return_fragment,Fail
 
dEQP-GLES2.functional.shaders.loops.for_constant_iterations.mixed_break_continue_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.nested_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.nested_sequence_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.nested_tricky_dataflow_1_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.nested_tricky_dataflow_2_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.no_iterations_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.post_increment_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.pre_increment_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.sequence_statement_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.single_iteration_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.single_statement_fragment,Fail
-dEQP-GLES2.functional.shaders.loops.for_constant_iterations.unconditional_continue_fragment,Fail
+
 dEQP-GLES2.functional.shaders.random.all_features.fragment.22,Fail
 dEQP-GLES2.functional.shaders.random.all_features.fragment.32,Fail
 dEQP-GLES2.functional.shaders.random.all_features.fragment.34,Fail
@@ -180,15 +94,8 @@ 
dEQP-GLES2.functional.shaders.random.trigonometric.fragment.42,Fail
 dEQP-GLES2.functional.shaders.random.trigonometric.fragment.45,Fail
 dEQP-GLES2.functional.shaders.random.trigonometric.fragment.52,Fail
 dEQP-GLES2.functional.shaders.random.trigonometric.fragment.81,Fail
-dEQP-GLES2.functional.shaders.return.return_in_static_loop_dynamic_fragment,Fail
-dEQP-GLES2.functional.shaders.return.return_in_static_loop_never_fragment,Fail
-dEQP-GLES2.functional.shaders.struct.local.loop_assignment_fragment,Fail
-dEQP-GLES2.functional.shaders.struct.local.loop_nested_struct_array_fragment,Fail
-dEQP-GLES2.functional.shaders.struct.local.loop_struct_array_fragment,Fail
-dEQP-GLES2.functional.shaders.struct.local.nested_loop_assignment_fragment,Fail
+
 
dEQP-GLES2.functional.shaders.struct.local.nested_struct_array_dynamic_index_fragment,Fail
-dEQP-GLES2.functional.shaders.struct.uniform.loop_nested_struct_array_fragment,Fail
-dEQP-GLES2.functional.shaders.struct.uniform.loop_struct_array_fragment,Fail
 
dEQP-GLES2.functional.shaders.struct.uniform.nested_struct_array_dynamic_index_fragment,Fail
 
 # Need to port the DP3 trick for all_equal from st_glsl_to_tgsi.
@@ -274,9 +181,6 @@ 
KHR-GLES2.core.internalformat.texture2d.depth_component_unsigned_short_depth_com
 
 # https://gitlab.freedesktop.org/mesa/mesa/-/issues/4979
 # Non-unrolled loops, but they should be unrollable.
-KHR-GLES2.shaders.aggressive_optimizations.cos_float_frag,Fail
-KHR-GLES2.shaders.aggressive_optimizations.cos_vec2_frag,Fail
-KHR-GLES2.shaders.aggressive_optimizations.cos_vec3_frag,Fail
 KHR-GLES2.shaders.aggressive_optimizations.sin_vec2_frag,Fail
 KHR-GLES2.shaders.aggressive_optimizations.sin_vec3_frag,Fail
 
diff --git a/src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt 
b/src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt
index 93854b76a20..42b01068324 100644
--- a/src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt
+++ b/src/gallium/drivers/i915/ci/piglit-i915-g33-fails.txt
@@ -186,11 +186,6 @@ spec@!opengl 1.4@tex-miplevel-selection-lod,Fail
 spec@!opengl 1.4@tex-miplevel-selection-lod-bias,Fail
 spec@!opengl 1.5@depth-tex-compare,Fail
 
-# testcase bug:
-# "Failed to link: error: sampler arrays indexed with non-constant expressions 
is forbidden in GLSL  110"
-spec@!opengl 2.0@max-samplers,Fail
-spec@!opengl 2.0@max-samplers border,Fail
-
 # Need to be able to report 0 OQ bits, since there are no HW OQs.
 spec@!opengl 2.0@occlusion-query-discard,Fail
 
@@ -773,7 +768,6 @@ 
[email protected]@execution@built-in-functions@fs-smoothstep-vec3-vec3-vec3,Fail
 [email protected]@execution@built-in-functions@fs-smoothstep-vec4-vec4-vec4,Fail
 [email protected]@execution@builtins@glsl-fs-atan-3,Fail
 [email protected]@execution@copy-propagation@glsl-copy-propagation-loop-1,Fail
[email protected]@execution@copy-propagation@glsl-copy-propagation-loop-2,Fail
 
 # No derivatives support in the HW.
 [email protected]@execution@derivatives@glsl-derivs-abs,Fail
@@ -802,11 +796,8 @@ 
[email protected]@[email protected],Fail
 [email protected]@execution@glsl-clamp-vertex-color,Fail
 [email protected]@execution@glsl-fs-convolution-1,Fail
 [email protected]@execution@glsl-fs-convolution-2,Fail
[email protected]@execution@glsl-fs-functions-5,Fail
[email protected]@execution@glsl-fs-functions-6,Fail
 [email protected]@execution@glsl-fs-if-nested-loop,Fail
 [email protected]@execution@glsl-fs-loop-while-false-03,Fail
[email protected]@execution@glsl-texcoord-array-2,Fail
 
[email protected]@execution@interpolation@interpolation-none-gl_backcolor-flat-fixed,Fail
 
[email protected]@execution@interpolation@interpolation-none-gl_backcolor-flat-none,Fail
 
[email protected]@execution@interpolation@interpolation-none-gl_backcolor-flat-vertex,Fail
@@ -827,25 +818,9 @@ 
[email protected]@execution@interpolation@interpolation-none-gl_frontsecondarycolor
 
[email protected]@execution@interpolation@interpolation-none-gl_frontsecondarycolor-smooth-vertex,Fail
 [email protected]@execution@loops@glsl-fs-continue-inside-do-while,Fail
 [email protected]@execution@loops@glsl-fs-loop-300,Fail
[email protected]@execution@loops@glsl-fs-loop-break,Fail
-
-# error: looping not supported i915 fragment shaders, all loops must be 
statically unrollable.
-# but it's a static 0-10 loop and should unroll.
[email protected]@execution@loops@glsl-fs-loop-const-decr,Fail
[email protected]@execution@loops@glsl-fs-loop-const-incr,Fail
 
 [email protected]@execution@loops@glsl-fs-loop-continue,Fail
[email protected]@execution@loops@glsl-fs-loop-ge,Fail
[email protected]@execution@loops@glsl-fs-loop-gt,Fail
[email protected]@execution@loops@glsl-fs-loop-le,Fail
[email protected]@execution@loops@glsl-fs-loop-lt,Fail
[email protected]@execution@loops@glsl-fs-loop-nested-if,Fail
 [email protected]@execution@loops@glsl-fs-loop-redundant-condition,Fail
[email protected]@execution@loops@glsl-fs-loop-two-counter-01,Fail
[email protected]@execution@loops@glsl-fs-loop-two-counter-02,Fail
[email protected]@execution@loops@glsl-fs-loop-two-counter-03,Fail
[email protected]@execution@loops@glsl-fs-loop-two-counter-04,Fail
[email protected]@execution@loops@glsl-fs-loop-zero-iter,Fail
 [email protected]@execution@loops@glsl-fs-unroll-out-param,Fail
 [email protected]@execution@loops@glsl-fs-unroll-side-effect,Fail
 [email protected]@execution@samplers@glsl-fs-shadow1d,Fail
@@ -886,7 +861,6 @@ 
[email protected]@execution@variable-indexing@fs-temp-array-mat4-index-wr,Fail
 
[email protected]@execution@variable-indexing@fs-uniform-array-mat4-index-col-row-rd,Fail
 
[email protected]@execution@variable-indexing@fs-varying-array-mat3-index-col-rd,Fail
 
[email protected]@execution@variable-indexing@fs-varying-array-mat3-index-col-row-rd,Fail
[email protected]@execution@variable-indexing@vs-output-array-float-index-wr,Fail
 [email protected]@execution@variable-indexing@vs-output-array-vec2-index-wr,Fail
 [email protected]@execution@variable-indexing@vs-output-array-vec3-index-wr,Fail
 [email protected]@execution@variable-indexing@vs-output-array-vec4-index-wr,Fail
@@ -924,10 +898,6 @@ [email protected]@execution@varying-packing@simple vec4 
array,Fail
 [email protected]@execution@varying-packing@simple vec4 separate,Fail
 [email protected]@[email protected],Fail
 
-# error: looping not supported i915 fragment shaders, all loops must be 
statically unrollable.
-# but it's a static 0-4 loop and should unroll.
[email protected]@linker@fs-loop-unrolled-divide-by-zero,Fail
-
 
[email protected]@execution@built-in-functions@fs-matrixcompmult-mat2x3-mat2x3,Fail
 
[email protected]@execution@built-in-functions@fs-matrixcompmult-mat2x4-mat2x4,Fail
 
[email protected]@execution@built-in-functions@fs-matrixcompmult-mat3x2-mat3x2,Fail
@@ -1052,7 +1022,6 @@ 
[email protected]@execution@built-in-functions@fs-outerproduct-vec4-vec4,Fail
 [email protected]@execution@fs-const-array-of-struct,Fail
 [email protected]@execution@fs-const-array-of-struct-of-array,Fail
 [email protected]@execution@fs-function-inout-array-of-structs,Fail
[email protected]@[email protected],Fail
 [email protected]@execution@fs-nan-builtin-max,Fail
 [email protected]@execution@fs-nan-builtin-min,Fail
 [email protected]@execution@fs-vec4-const-array-indirect-access-032-elements,Fail
@@ -1120,7 +1089,6 @@ 
[email protected]@execution@variable-indexing@vs-varying-array-mat3-index-col-row-w
 
[email protected]@execution@variable-indexing@vs-varying-array-mat3-index-col-wr,Fail
 
[email protected]@execution@variable-indexing@vs-varying-array-mat3-index-row-wr,Fail
 [email protected]@execution@variable-indexing@vs-varying-array-mat3-index-wr,Fail
[email protected]@execution@unroll-do-while-false-loop-only-once,Fail
 spec@intel_performance_query@intel_performance_query-issue_2235,Fail
 spec@nv_primitive_restart@primitive-restart-draw-mode-lines,Fail
 spec@nv_primitive_restart@primitive-restart-draw-mode-quad_strip,Fail
diff --git a/src/gallium/drivers/i915/ci/traces-i915.yml 
b/src/gallium/drivers/i915/ci/traces-i915.yml
index da9fded88dd..f8ee679d474 100644
--- a/src/gallium/drivers/i915/ci/traces-i915.yml
+++ b/src/gallium/drivers/i915/ci/traces-i915.yml
@@ -12,7 +12,7 @@ traces:
   - path: gputest/plot3d.trace
     expectations:
       - device: i915-g33
-        checksum: 6a3f62f1c6cc57c91188f93f37ebf9b4
+        checksum: 4731890d1f782c106dd9c12af77b3607
   - path: gputest/triangle.trace
     expectations:
       # Weird white bar behind Tux's head.
diff --git a/src/mesa/state_tracker/st_extensions.c 
b/src/mesa/state_tracker/st_extensions.c
index c7d5a4bc960..f27051115d1 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -326,9 +326,16 @@ void st_init_limits(struct pipe_screen *screen,
       options->MaxIfDepth =
          screen->get_shader_param(screen, sh,
                                   PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH);
-      options->EmitNoLoops =
+
+      /* If we're using NIR, then leave GLSL loop handling to NIR.  If we set
+       * this flag, then GLSL jump lowering will turn the breaks into something
+       * that GLSL loop unrolling can't handle, and then you get linker 
failures
+       * about samplers with non-const indexes in loops that should be 
unrollable.
+       */
+      options->EmitNoLoops = !prefer_nir &&
          !screen->get_shader_param(screen, sh,
                                    PIPE_SHADER_CAP_MAX_CONTROL_FLOW_DEPTH);
+
       options->EmitNoMainReturn =
          !screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_SUBROUTINES);
 

Reply via email to