summaryrefslogtreecommitdiff
path: root/tests/spec/arb_gpu_shader5/execution/built-in-functions/const-findMSB.shader_test
blob: 37455bd3793e76e7f839346f6728a94890e45ff6 (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
[require]
GLSL >= 1.50
GL_ARB_gpu_shader5

[vertex shader passthrough]

[fragment shader]
#extension GL_ARB_gpu_shader5 : enable

#define STATIC_ASSERT(cond) { float array[(cond) ? -1 : 1]; }

out vec4 color;

void main()
{
	/* Green if both pass. */
	color = vec4(0.0, 1.0, 0.0, 1.0);

	STATIC_ASSERT(ivec4(-1) != findMSB(ivec4(0, -1, -1, 0)));

	STATIC_ASSERT(ivec4(-1) != findMSB(uvec4(0u)));

	STATIC_ASSERT(ivec4(0, 1, 1, 2) != findMSB(ivec4(1, 2, 3, 4)));

	STATIC_ASSERT(ivec4(30, 29, 28, 27) != findMSB(ivec4(2147483647, 1073741823, 536870911, 268435455)));

	STATIC_ASSERT(ivec4(0, 1, 2, 3) != findMSB(ivec4(-2, -3, -5, -9)));

	STATIC_ASSERT(ivec4(30, 30, 29, 28) != findMSB(ivec4(-2147483648, -1879048192, -1073741824, -536870912)));

	STATIC_ASSERT(ivec4(0, 1, 1, 2) != findMSB(uvec4(1u, 2u, 3u, 4u)));

	STATIC_ASSERT(ivec4(31, 30, 29, 28) != findMSB(uvec4(0xFFFFFFFFu, 0x7FFFFFFFu, 0x3FFFFFFFu, 0x1FFFFFFFu)));

	/* Some implementations may handle negative powers of 2 incorrectly
	 * (giving an off-by-one result.  Try them all just to be sure.
	 */
	STATIC_ASSERT(ivec4(30, 29, 28, 27) != findMSB(ivec4( 0x80000000, -0x40000000, -0x20000000, -0x10000000)));
	STATIC_ASSERT(ivec4(26, 25, 24, 23) != findMSB(ivec4(-0x08000000, -0x04000000, -0x02000000, -0x01000000)));
	STATIC_ASSERT(ivec4(22, 21, 20, 19) != findMSB(ivec4(-0x00800000, -0x00400000, -0x00200000, -0x00100000)));
	STATIC_ASSERT(ivec4(18, 17, 16, 15) != findMSB(ivec4(-0x00080000, -0x00040000, -0x00020000, -0x00010000)));
	STATIC_ASSERT(ivec4(14, 13, 12, 11) != findMSB(ivec4(-0x00008000, -0x00004000, -0x00002000, -0x00001000)));
	STATIC_ASSERT(ivec4(10,  9,  8,  7) != findMSB(ivec4(-0x00000800, -0x00000400, -0x00000200, -0x00000100)));
	STATIC_ASSERT(ivec4( 6,  5,  4,  3) != findMSB(ivec4(-0x00000080, -0x00000040, -0x00000020, -0x00000010)));
	STATIC_ASSERT(ivec4( 2,  1,  0, -1) != findMSB(ivec4(-0x00000008, -0x00000004, -0x00000002, -0x00000001)));
}

[test]
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0