[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