[Mesa-dev] [PATCH 2/2] Remove fs-discard-exit-3
Marek Olšák
maraeo at gmail.com
Fri Apr 8 22:58:17 UTC 2016
BTW, Talos Principle had a bug that it calculated derivatives after
discard, which is undefined on radeonsi if it results in non-uniform
control flow. Then, somebody reported the bug to them, and they fixed
it.
I have to say that rarely do we find a test that quotes the spec and
expects the exact opposite. :)
(oh sorry, this should have been on the piglit ML)
Marek
On Fri, Apr 8, 2016 at 11:58 PM, Francisco Jerez <currojerez at riseup.net> wrote:
> Marek Olšák <maraeo at gmail.com> writes:
>
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> The test is wrong and the GLSL 1.30 citation in the test states very
>> clearly that discard can cause non-uniform control flow for any code that
>> follows.
>
> Heh, IIRC I sent this exact same patch over a year ago but I didn't get
> particularly enthusiastic feed-back so I never pushed it (you can
> probably find the discussion in the piglit mailing list archives if
> you're interested). Anyway the test is obviously bogus so this seems
> like the right thing to do to me:
>
> Reviewed-by: Francisco Jerez <currojerez at riseup.net>
>
>> ---
>> .../execution/fs-discard-exit-3.shader_test | 76 ----------------------
>> 1 file changed, 76 deletions(-)
>> delete mode 100644 tests/spec/glsl-1.30/execution/fs-discard-exit-3.shader_test
>>
>> diff --git a/tests/spec/glsl-1.30/execution/fs-discard-exit-3.shader_test b/tests/spec/glsl-1.30/execution/fs-discard-exit-3.shader_test
>> deleted file mode 100644
>> index 14e9b47..0000000
>> --- a/tests/spec/glsl-1.30/execution/fs-discard-exit-3.shader_test
>> +++ /dev/null
>> @@ -1,76 +0,0 @@
>> -# This is a test for derivatives behavior after a discard.
>> -#
>> -# From the GLSL 1.30 spec:
>> -#
>> -# "The discard keyword is only allowed within fragment shaders. It
>> -# can be used within a fragment shader to abandon the operation
>> -# on the current fragment. This keyword causes the fragment to be
>> -# discarded and no updates to any buffers will occur. Control
>> -# flow exits the shader, and subsequent implicit or explicit
>> -# derivatives are undefined when this control flow is non-uniform
>> -# (meaning different fragments within the primitive take
>> -# different control paths)."
>> -
>> -
>> -[require]
>> -GLSL >= 1.30
>> -
>> -[vertex shader]
>> -#version 130
>> -
>> -in vec4 vertex;
>> -out vec2 texcoords;
>> -void main()
>> -{
>> - gl_Position = vertex;
>> -
>> - /* Turn the texcoords into a 1:1 mapping with pixels when
>> - * interpolated. This means that the coords for our 2x2
>> - * subspan we're interested in for the FS will be:
>> - *
>> - * +-----+-----+
>> - * | 0,1 | 1,1 |
>> - * +-----+-----+
>> - * | 0,0 | 0,1 |
>> - * +-----+-----+
>> - *
>> - * So it would sample the 1x1 miplevel of the GL_TEXTURE_2D
>> - * miptree, unless some other math occurs...
>> - */
>> - texcoords.yx = (vertex.xy + 1) / 2 * 250;
>> -}
>> -
>> -[fragment shader]
>> -#version 130
>> -in vec2 texcoords;
>> -uniform sampler2D s;
>> -
>> -void main()
>> -{
>> - if (gl_FragCoord.x >= 1.0 || gl_FragCoord.y >= 1.0)
>> - discard;
>> -
>> - /* Now, we have uniform control after the discard (well,
>> - * except for the join after the if statement up there). The
>> - * derivatives on this sample should get us the same values
>> - * for the undiscarded pixel as if we hadn't done any discard
>> - * (comment out the "discard" above to see).
>> - */
>> - gl_FragColor = texture(s, texcoords / 4);
>> -}
>> -
>> -[vertex data]
>> -vertex/float/2
>> --1.0 -1.0
>> - 1.0 -1.0
>> - 1.0 1.0
>> --1.0 1.0
>> -
>> -[test]
>> -clear color 0.5 0.5 0.5 0.5
>> -clear
>> -
>> -texture miptree 0
>> -
>> -draw arrays GL_TRIANGLE_FAN 0 4
>> -probe rgba 0 0 0.0 1.0 0.0 1.0
>> --
>> 2.5.0
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list