gallivm: disable GLSL IR loop unrolling in LLVMPIPE

The NIR unroller is already enabled so just allow it to do its job.

We add a new failure here because llvmpipe fails to handle a
shader that is no longer unrolled.

Previously GLSL IR could unroll the loop because it only had a
single break. However once lower_returns passes over the shader
it ends up with more than 2 breaks making it no longer possible
to unroll. This is a disadvantage of doing the unrolling in NIR
however in practice we don't see shaders in the wild with multiple
returns inside loops.

Being unable to handle this loop is an existing bug with llvmpipe
exposed by the loop no longer being unrolled.

Reviewed-by: Emma Anholt <emma@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16366>
This commit is contained in:
Timothy Arceri 2022-05-06 11:17:38 +10:00 committed by Marge Bot
parent 3b3cd59fb8
commit 0f1cbcd6a7
2 changed files with 2 additions and 2 deletions

View file

@ -157,9 +157,8 @@ gallivm_get_shader_param(enum pipe_shader_cap param)
case PIPE_SHADER_CAP_LDEXP_SUPPORTED:
case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTERS:
case PIPE_SHADER_CAP_MAX_HW_ATOMIC_COUNTER_BUFFERS:
return 0;
case PIPE_SHADER_CAP_MAX_UNROLL_ITERATIONS_HINT:
return 32;
return 0;
case PIPE_SHADER_CAP_MAX_SHADER_BUFFERS:
return LP_MAX_TGSI_SHADER_BUFFERS;
case PIPE_SHADER_CAP_MAX_SHADER_IMAGES:

View file

@ -94,6 +94,7 @@ spec@!opengl 1.1@read-front samples=2,Fail
spec@!opengl 1.1@read-front samples=4,Fail
spec@!opengl 3.0@clearbuffer-depth-cs-probe,Fail
spec@!opengl 3.2@layered-rendering@clear-color-mismatched-layer-count,Fail
spec@arb_enhanced_layouts@execution@component-layout@vs-fs-array-dvec3,Fail
spec@arb_pipeline_statistics_query@arb_pipeline_statistics_query-frag,Fail
spec@arb_post_depth_coverage@arb_post_depth_coverage-multisampling,Fail