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
|
[require]
GLSL >= 1.50
GL_ARB_gpu_shader5
[vertex shader passthrough]
[fragment shader]
#extension GL_ARB_gpu_shader5 : enable
out vec4 color;
uniform bool test_signed;
uniform ivec4 msb;
uniform ivec4 iinput;
uniform uvec4 uinput;
void main()
{
/* 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);
}
[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
|