File: ssbo-atomicMax-float.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 (141 lines) | stat: -rw-r--r-- 3,641 bytes parent folder | download | duplicates (3)
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
[require]
GL >= 3.3
GLSL >= 3.30
GL_ARB_shader_storage_buffer_object
GL_ARB_shader_atomic_counters
GL_INTEL_shader_atomic_float_minmax

[vertex shader passthrough]

[fragment shader]
#version 330
#extension GL_ARB_shader_storage_buffer_object: require
#extension GL_ARB_shader_atomic_counters: require
#extension GL_INTEL_shader_atomic_float_minmax: require

layout(binding = 0, std430) buffer bufblock {
	float array[64];
	float value;
};

layout(binding = 0) uniform atomic_uint fail;

out vec4 color;

void main()
{
	int x = int(gl_FragCoord.x);
	int y = int(gl_FragCoord.y);
	int local_index = y * array.length() + x;
	float v;

	/* For value, every instance should get 2147483647. */
	v = atomicMax(value, local_index);
	if (v != 2147483647)
		atomicCounterIncrement(fail);

	if (value != 2147483647)
		atomicCounterIncrement(fail);

	if (local_index < array.length()) {
		float first_expected = (local_index + 1) * -4;
		float second_expected = local_index * 4;

		/* The per-instance value should give the old value on the
		 * first step.  This is expected to be the negative byte
		 * offset of the next array element.
		 */
		v = atomicMax(array[local_index], second_expected);
		if (v != first_expected)
			atomicCounterIncrement(fail);

		/* The per-instance value should give the new value on the
		 * second step.  This is expected to be the byte offset of the
		 * current array element.
		 */
		v = atomicExchange(array[local_index], first_expected);
		if (v != second_expected)
			atomicCounterIncrement(fail);

		color = vec4(0.0, 1.0, 0.0, 1.0);
	} else {
		color = vec4(0.0, 0.0, 1.0, 1.0);
	}
}

[test]
atomic counters 1

ssbo 0 260
ssbo 0 subdata float 0 -4
ssbo 0 subdata float 4 -8
ssbo 0 subdata float 8 -12
ssbo 0 subdata float 12 -16
ssbo 0 subdata float 16 -20
ssbo 0 subdata float 20 -24
ssbo 0 subdata float 24 -28
ssbo 0 subdata float 28 -32
ssbo 0 subdata float 32 -36
ssbo 0 subdata float 36 -40
ssbo 0 subdata float 40 -44
ssbo 0 subdata float 44 -48
ssbo 0 subdata float 48 -52
ssbo 0 subdata float 52 -56
ssbo 0 subdata float 56 -60
ssbo 0 subdata float 60 -64
ssbo 0 subdata float 64 -68
ssbo 0 subdata float 68 -72
ssbo 0 subdata float 72 -76
ssbo 0 subdata float 76 -80
ssbo 0 subdata float 80 -84
ssbo 0 subdata float 84 -88
ssbo 0 subdata float 88 -92
ssbo 0 subdata float 92 -96
ssbo 0 subdata float 96 -100
ssbo 0 subdata float 100 -104
ssbo 0 subdata float 104 -108
ssbo 0 subdata float 108 -112
ssbo 0 subdata float 112 -116
ssbo 0 subdata float 116 -120
ssbo 0 subdata float 120 -124
ssbo 0 subdata float 124 -128
ssbo 0 subdata float 128 -132
ssbo 0 subdata float 132 -136
ssbo 0 subdata float 136 -140
ssbo 0 subdata float 140 -144
ssbo 0 subdata float 144 -148
ssbo 0 subdata float 148 -152
ssbo 0 subdata float 152 -156
ssbo 0 subdata float 156 -160
ssbo 0 subdata float 160 -164
ssbo 0 subdata float 164 -168
ssbo 0 subdata float 168 -172
ssbo 0 subdata float 172 -176
ssbo 0 subdata float 176 -180
ssbo 0 subdata float 180 -184
ssbo 0 subdata float 184 -188
ssbo 0 subdata float 188 -192
ssbo 0 subdata float 192 -196
ssbo 0 subdata float 196 -200
ssbo 0 subdata float 200 -204
ssbo 0 subdata float 204 -208
ssbo 0 subdata float 208 -212
ssbo 0 subdata float 212 -216
ssbo 0 subdata float 216 -220
ssbo 0 subdata float 220 -224
ssbo 0 subdata float 224 -228
ssbo 0 subdata float 228 -232
ssbo 0 subdata float 232 -236
ssbo 0 subdata float 236 -240
ssbo 0 subdata float 240 -244
ssbo 0 subdata float 244 -248
ssbo 0 subdata float 248 -252
ssbo 0 subdata float 252 -256
ssbo 0 subdata float 256 2147483647

clear color 0.5 0.5 0.5 0.5
clear

draw rect -1 -1 2 2

probe atomic counter 0 == 0