1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
|
# Test proper behavior of the isnan(vec4) function.
#
# Note: testing behavior if isnan() is challenging because the GLSL
# 1.50 spec does not explicitly define any circumstances under which
# NaN values are required to be generated. This test assumes that the
# expression 0.0/0.0 produces a NaN value when evaluated in the
# shader.
[require]
GLSL >= 1.50
GL_ARB_gpu_shader_fp64
[vertex shader]
#version 150
in vec4 piglit_vertex;
out vec4 vertex_to_gs;
void main()
{
vertex_to_gs = piglit_vertex;
}
[geometry shader]
#version 150
#extension GL_ARB_gpu_shader_fp64 : require
layout(triangles) in;
layout(triangle_strip, max_vertices = 3) out;
uniform double tolerance;
uniform dvec4 numerator;
uniform dvec4 denominator;
uniform dvec4 expected;
in vec4 vertex_to_gs[3];
out vec4 fs_color;
void main()
{
dvec4 r4 = numerator/denominator;
dvec4 bl4 = dvec4(isnan(r4));
dvec3 r3 = numerator.xyz/denominator.xyz;
dvec3 bl3 = dvec3(isnan(r3));
dvec2 r2 = numerator.zw/denominator.zw;
dvec2 bl2 = dvec2(isnan(r2));
double r1 = numerator.x/denominator.x;
double bl1 = double(isnan(r1));
for (int i = 0; i < 3; i++) {
fs_color = vec4(0.0);
if (distance(bl4, expected) > tolerance)
fs_color.x = 1.0;
if (distance(bl3, expected.xyz) > tolerance)
fs_color.y = 1.0;
if (distance(bl2, expected.zw) > tolerance)
fs_color.z = 1.0;
if (distance(bl1, expected.x) > tolerance)
fs_color.w = 1.0;
gl_Position = vertex_to_gs[i];
EmitVertex();
}
}
[fragment shader]
#version 150
in vec4 fs_color;
out vec4 color;
void main() {
color = fs_color;
}
[test]
clear color 0.0 0.0 1.0 0.0
clear
uniform double tolerance 0.0
uniform dvec4 numerator 1.0 0.0 0.0 1.0
uniform dvec4 denominator 1.0 0.0 0.0 1.0
uniform dvec4 expected 0.0 1.0 1.0 0.0
draw rect -1 -1 2 2
probe rgba 0 0 0.0 0.0 0.0 0.0
clear
uniform double tolerance 0.0
uniform dvec4 numerator 0.0 1.0 1.0 0.0
uniform dvec4 denominator 0.0 1.0 1.0 0.0
uniform dvec4 expected 1.0 0.0 0.0 1.0
draw rect -1 -1 2 2
probe rgba 1 0 0.0 0.0 0.0 0.0
clear
uniform double tolerance 0.0
uniform dvec4 numerator 0.0 0.0 1.0 1.0
uniform dvec4 denominator 0.0 1.0 1.0 0.0
uniform dvec4 expected 1.0 0.0 0.0 0.0
draw rect -1 -1 2 2
probe rgba 2 0 0.0 0.0 0.0 0.0
|