summaryrefslogtreecommitdiff
path: root/tests/shaders/glsl-vs-absoluteDifference-int.shader_test
blob: 455ee16addd2714fa64d6b513b671df269afb487 (plain)
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
[require]
GL >= 3.0
GLSL >= 1.30
GL_EXT_shader_integer_mix

[vertex shader]
#extension GL_EXT_shader_integer_mix: require

// { A, B, absoluteDifference(A, B) }
uniform ivec3 data[40];

in vec4 piglit_vertex;
out vec4 color;

uint abs_diff(int a, int b)
{
    /* This can fail if the compiler replaces the (a < b) with the result of
     * one of the subtractions.  For inputs a = 0x80000000, b = 4,
     * int(0x80000000) < 4, but int(0x80000000)-4 overflows and results in
     * 0x7ffffffc.  That's not less than zero, so the flags get set
     * differently than for (a < b).
     */
    return mix(uint(a - b), uint(b - a), a < b);
}

void main()
{
    color = vec4(0.0, 1.0, 0.0, 1.0);

    for (int i = 0; i < data.length(); i++) {
	ivec3 v = data[i];

	if (abs_diff(v.x, v.y) != uint(v.z))
	    color = vec4(1.0, 0.0, 0.0, 1.0);
    }

    gl_Position = piglit_vertex;
}


[fragment shader]
in vec4 color;
out vec4 piglit_fragcolor;

void main()
{
    piglit_fragcolor = color;
}

[test]
uniform ivec3 data[0] 0x80000000 0x80000000 0x00000000
uniform ivec3 data[1] 0x80000000 0x80000001 0x00000001
uniform ivec3 data[2] 0x80000000 0xf8000000 0x78000000
uniform ivec3 data[3] 0x80000000 0xf8000001 0x78000001
uniform ivec3 data[4] 0x80000000 0xff800000 0x7f800000
uniform ivec3 data[5] 0x80000000 0xff800001 0x7f800001
uniform ivec3 data[6] 0x80000000 0xfff80000 0x7ff80000
uniform ivec3 data[7] 0x80000000 0xfff80001 0x7ff80001
uniform ivec3 data[8] 0x80000000 0xffff8000 0x7fff8000
uniform ivec3 data[9] 0x80000000 0xffff8001 0x7fff8001
uniform ivec3 data[10] 0x80000000 0xfffff800 0x7ffff800
uniform ivec3 data[11] 0x80000000 0xfffff801 0x7ffff801
uniform ivec3 data[12] 0x80000000 0xffffff80 0x7fffff80
uniform ivec3 data[13] 0x80000000 0xffffff81 0x7fffff81
uniform ivec3 data[14] 0x80000000 0xfffffff8 0x7ffffff8
uniform ivec3 data[15] 0x80000000 0xfffffff9 0x7ffffff9
uniform ivec3 data[16] 0x80000000 0xfffffffa 0x7ffffffa
uniform ivec3 data[17] 0x80000000 0xfffffffb 0x7ffffffb
uniform ivec3 data[18] 0x80000000 0xfffffffc 0x7ffffffc
uniform ivec3 data[19] 0x80000000 0xfffffffd 0x7ffffffd
uniform ivec3 data[20] 0x80000000 0xfffffffe 0x7ffffffe
uniform ivec3 data[21] 0x80000000 0xffffffff 0x7fffffff
uniform ivec3 data[22] 0x80000000 0x00000000 0x80000000
uniform ivec3 data[23] 0x80000000 0x00000001 0x80000001
uniform ivec3 data[24] 0x80000000 0x00000002 0x80000002
uniform ivec3 data[25] 0x80000000 0x00000003 0x80000003
uniform ivec3 data[26] 0x80000000 0x00000004 0x80000004
uniform ivec3 data[27] 0x80000000 0x00000005 0x80000005
uniform ivec3 data[28] 0x80000000 0x00000006 0x80000006
uniform ivec3 data[29] 0x80000000 0x00000007 0x80000007
uniform ivec3 data[30] 0x80000000 0x00000008 0x80000008
uniform ivec3 data[31] 0x80000000 0x0000007f 0x8000007f
uniform ivec3 data[32] 0x80000000 0x00000080 0x80000080
uniform ivec3 data[33] 0x80000000 0x000007ff 0x800007ff
uniform ivec3 data[34] 0x80000000 0x00000800 0x80000800
uniform ivec3 data[35] 0x80000000 0x00007fff 0x80007fff
uniform ivec3 data[36] 0x80000000 0x00008000 0x80008000
uniform ivec3 data[37] 0x80000000 0x0007ffff 0x8007ffff
uniform ivec3 data[38] 0x80000000 0x00080000 0x80080000
uniform ivec3 data[39] 0x80000000 0x007fffff 0x807fffff

draw rect -1 -1 2 2
probe all rgb 0.0 1.0 0.0