glsl-array-bounds: set out-of-bounds array index inside shader
[piglit.git] / tests / shaders / glsl-bug-109759-and-110201.shader_test
blob67947a8dab452c40f4989cbc02a89ebf1063b5eb
1 /*
2  * Copyright © 2019 Intel Corporation
3  *
4  * Test based on Mesa-commit 6e184147ddce11e90c269a47af7d7395f5ed9c12
5  * Test generates NIR (vec4-backend):
6  *
7  * vec1 32 ssa_0 = load_const (0x00000000 /* 0.000000 */)
8  * vec1 32 ssa_1 = load_const (0x3f800000 /* 1.000000 */)
9  * vec2 32 ssa_2 = load_const (0x00000000 /* 0.000000 */, 0x00000001 /* 0.000000 */)
10  * vec4 32 ssa_3 = intrinsic load_input (ssa_0) (0, 0) /* base=0 */ /* component=0 */
11  * vec1 32 ssa_4 = intrinsic load_uniform (ssa_0) (64, 16) /* base=64 */ /* range=16 */ /* dx */
12  * vec1 32 ssa_5 = intrinsic load_uniform (ssa_0) (80, 16) /* base=80 */ /* range=16 */ /* dy */
13  * vec1 32 ssa_6 = intrinsic load_uniform (ssa_0) (96, 16) /* base=96 */ /* range=16 */ /* xnum */
14  * vec1 32 ssa_7 = load_const (0x00000004 /* 0.000000 */)
15  * vec1 32 ssa_8 = ishl ssa_6, ssa_7
16  * vec2 32 ssa_9 = intrinsic load_uniform (ssa_8) (0, 64) /* base=0 */ /* range=64 */
17  * vec2 32 ssa_9 = intrinsic load_uniform (ssa_8) (0, 64) /* base=0 */ /* range=64 */
18  * vec2 32 ssa_10 = ieq32 ssa_9.xx, ssa_2
19  * r0.x = b32csel ssa_10.y, ssa_4, ssa_0
20  * vec2 32 ssa_12 = ieq32 ssa_9.yy, ssa_2
21  * r0.y = b32csel ssa_12.y, ssa_5.x, ssa_0.x
22  * r0.z = b32csel ssa_10.y, ssa_5.x, ssa_0.x
23  * r0.w = imov ssa_1.x
24  *
25  * After optimizations, for NIR:
26  * r0.x = b32csel ssa_10.y, ssa_4, ssa_0
27  * vec2 32 ssa_12 = ieq32 ssa_9.yy, ssa_2
28  *
29  * will be generated invalid assembler-code:
30  * cmp.z.f0.0(8)   g14<1>.yD       g13<4>.xD       1D              { align16 1Q };
31  * (+f0.0.x) sel(8) g3<1>.xUD      g1<0>.xUD       0x00000000UD    { align16 1Q };
32  *
33  * \author Sergii Romantsov <sergii.romantsov@globallogic.com>
34  * Checks: https://bugs.freedesktop.org/show_bug.cgi?id=109759
35  * Checks: https://bugs.freedesktop.org/show_bug.cgi?id=110201
36  */
38 [require]
39 GLSL >= 1.30
41 [vertex shader]
42 #version 130
44 uniform float dx;
45 uniform float dy;
46 uniform uint xnum;
48 const uvec2 cell_color_map[] = uvec2[4](
49     uvec2(0, 0),  // black      -> black rgb(0, 0, 0, 1)
50     uvec2(0, 1),  // green      -> green rgb(0, 1, 0, 1)
51     uvec2(1, 0),  // red        -> magenta rgb(1, 0, 1, 1)
52     uvec2(1, 1)   // yellow     -> white rgb(1, 1, 1, 1)
55 out vec4 color;
56 in vec4 piglit_vertex;
57 void main()
59     gl_Position = piglit_vertex;
60     vec2 xpos = vec2(0, dx);
61     vec2 ypos = vec2(0, dy);
62     uvec2 pos = cell_color_map[xnum];
63     color = vec4(xpos[pos.x], ypos[pos.y], ypos[pos.x], 1.0);
66 [fragment shader]
67 in vec4 color;
68 void main()
70     gl_FragColor = vec4(color.x, color.y, color.z, 1.0);
73 [test]
74 link success
76 clear color 0.0 0.0 0.0 0.0
77 clear
79 uniform float dx 1.0
80 uniform float dy 1.0
82 uniform uint xnum 0
83 draw rect -1 -1 1 1
85 uniform uint xnum 1
86 draw rect 0 -1 1 1
88 uniform uint xnum 2
89 draw rect -1 0 1 1
91 uniform uint xnum 3
92 draw rect 0 0 1 1
94 relative probe rgba (0.25, 0.25) (0.0, 0.0, 0.0, 1.0)
95 relative probe rgba (0.75, 0.25) (0.0, 1.0, 0.0, 1.0)
96 relative probe rgba (0.25, 0.75) (1.0, 0.0, 1.0, 1.0)
97 relative probe rgba (0.75, 0.75) (1.0, 1.0, 1.0, 1.0)