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
|
[require]
GLSL >= 1.50
GL_ARB_gpu_shader5
[vertex shader]
#extension GL_ARB_gpu_shader5 : enable
in vec4 piglit_vertex;
out vec4 color;
uniform bool test_signed;
uniform ivec4 msb;
uniform ivec4 iinput;
uniform uvec4 uinput;
void main() {
gl_Position = piglit_vertex;
/* Green if both pass. */
color = vec4(0.0, 1.0, 0.0, 1.0);
if (test_signed && msb != findMSB(iinput))
/* Red if findMSB(ivec4) fails. */
color = vec4(1.0, 0.0, 0.0, 1.0);
else if (!test_signed && msb != findMSB(uinput))
/* Blue if findMSB(uvec4) fails. */
color = vec4(0.0, 0.0, 1.0, 1.0);
}
[fragment shader]
in vec4 color;
out vec4 frag_color;
void main()
{
frag_color = color;
}
[test]
# For a value of zero or negative one, -1 will be returned.
uniform int test_signed 1
uniform ivec4 msb -1 -1 -1 -1
uniform ivec4 iinput 0 -1 -1 0
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
uniform int test_signed 0
uniform ivec4 msb -1 -1 -1 -1
uniform uvec4 uinput 0 0 0 0
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
# Signed inputs
uniform int test_signed 1
uniform ivec4 msb 0 1 1 2
uniform ivec4 iinput 1 2 3 4
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
uniform ivec4 msb 30 29 28 27
uniform ivec4 iinput 2147483647 1073741823 536870911 268435455
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
# Most significant bit in negative signed integers is actually a zero.
uniform ivec4 msb 0 1 2 3
uniform ivec4 iinput -2 -3 -5 -9
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
uniform ivec4 msb 30 30 29 28
uniform ivec4 iinput -2147483648 -1879048192 -1073741824 -536870912
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
# Unsigned inputs
uniform int test_signed 0
uniform ivec4 msb 0 1 1 2
uniform uvec4 uinput 1 2 3 4
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
uniform ivec4 msb 31 30 29 28
uniform uvec4 uinput 0xFFFFFFFF 0x7FFFFFFF 0x3FFFFFFF 0x1FFFFFFF
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
# Some implementations may handle negative powers of 2 incorrectly (giving an
# off-by-one result. Try them all just to be sure.
uniform int test_signed 1
uniform ivec4 msb 30 29 28 27
uniform ivec4 iinput 0x80000000 -0x40000000 -0x20000000 -0x10000000
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
uniform ivec4 msb 26 25 24 23
uniform ivec4 iinput -0x08000000 -0x04000000 -0x02000000 -0x01000000
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
uniform ivec4 msb 22 21 20 19
uniform ivec4 iinput -0x00800000 -0x00400000 -0x00200000 -0x00100000
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
uniform ivec4 msb 18 17 16 15
uniform ivec4 iinput -0x00080000 -0x00040000 -0x00020000 -0x00010000
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
uniform ivec4 msb 14 13 12 11
uniform ivec4 iinput -0x00008000 -0x00004000 -0x00002000 -0x00001000
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
uniform ivec4 msb 10 9 8 7
uniform ivec4 iinput -0x00000800 -0x00000400 -0x00000200 -0x00000100
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
uniform ivec4 msb 6 5 4 3
uniform ivec4 iinput -0x00000080 -0x00000040 -0x00000020 -0x00000010
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
uniform ivec4 msb 2 1 0 -1
uniform ivec4 iinput -0x00000008 -0x00000004 -0x00000002 -0x00000001
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
|