File: gs-isnan-dvec.shader_test

package info (click to toggle)
piglit 0~git20200212-f4710c51b-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 106,972 kB
  • sloc: ansic: 263,763; xml: 48,941; python: 29,918; lisp: 19,789; cpp: 12,142; sh: 22; makefile: 20; pascal: 5
file content (104 lines) | stat: -rw-r--r-- 2,261 bytes parent folder | download | duplicates (4)
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