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
|
[require]
GL >= 4.0
GLSL >= 4.00
GL_ARB_gpu_shader_int64
[vertex shader passthrough]
[fragment shader]
#version 400
#extension GL_ARB_gpu_shader_int64 : require
uniform uint64_t ival[] = uint64_t[](0xBADDC0DEDEADBEEFul,
0xDEADBEA7BA5EBA11ul,
0xF0F1F2F3F4F5F6F7ul,
0x0F1F2F3F4F5F6F7Ful,
0x7071727374757677ul,
0x0717273747576777ul,
0x1F2E3D4C5B6A7988ul,
0xBADB100DDEADC0DEul);
const uint64_t expected[] = uint64_t[](0x00000000000000EFul,
0x00000000000000BAul,
0x00000000000000F5ul,
0x000000000000004Ful,
0x0000000000000073ul,
0x0000000000000027ul,
0x000000000000002Eul,
0x00000000000000BAul);
out vec4 piglit_fragcolor;
void main()
{
uint fail_mask = 0;
uint64_t result;
uint i;
/* This is INTENTIONALLY not a loop. Putting it in a loop causes the
* optimization that generates the extract instructions to trigger
* before the shift count is known to be a constant. The effectively
* prevents the bad code generation in the i965 driver from occuring.
*/
i = 0;
result = (ival[i] << (56u - (i * 8u))) >> 56u;
fail_mask |= result != expected[i] ? 1u << i : 0u;
i = 1;
result = (ival[i] << (56u - (i * 8u))) >> 56u;
fail_mask |= result != expected[i] ? 1u << i : 0u;
i = 2;
result = (ival[i] << (56u - (i * 8u))) >> 56u;
fail_mask |= result != expected[i] ? 1u << i : 0u;
i = 3;
result = (ival[i] << (56u - (i * 8u))) >> 56u;
fail_mask |= result != expected[i] ? 1u << i : 0u;
i = 4;
result = (ival[i] << (56u - (i * 8u))) >> 56u;
fail_mask |= result != expected[i] ? 1u << i : 0u;
i = 5;
result = (ival[i] << (56u - (i * 8u))) >> 56u;
fail_mask |= result != expected[i] ? 1u << i : 0u;
i = 6;
result = (ival[i] << (56u - (i * 8u))) >> 56u;
fail_mask |= result != expected[i] ? 1u << i : 0u;
i = 7;
result = (ival[i] << (56u - (i * 8u))) >> 56u;
fail_mask |= result != expected[i] ? 1u << i : 0u;
/* Construct a clever color so that just looking at the "Observed:"
* output from shader_runner will tell you exactly which values did
* not match.
*/
piglit_fragcolor = fail_mask == 0
? vec4(0.0, 1.0, 0.0, 1.0)
: vec4(float(fail_mask) / 255.0, 0.0, 0.0, 1.0);
}
[test]
clear color 0.5 0.5 0.5 0.5
clear
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
|