From: Marek Olšák <marek.ol...@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. --- .../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@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev