xref: /aosp_15_r20/external/mesa3d/src/compiler/nir/tests/opt_varyings_tests_prop_uniform.cpp (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright 2023 Advanced Micro Devices, Inc.
3  *
4  * SPDX-License-Identifier: MIT
5  */
6 
7 #include "nir_opt_varyings_test.h"
8 
9 class nir_opt_varyings_test_prop_uniform : public nir_opt_varyings_test
10 {};
11 
12 #define SHADER_UNIFORM_OUTPUT(producer_stage, consumer_stage, slot, comp, type, bitsize, index0, index1) \
13    create_shaders(MESA_SHADER_##producer_stage, MESA_SHADER_##consumer_stage); \
14    UNUSED nir_intrinsic_instr *store, *store2 = NULL, *store3 = NULL; \
15    store = \
16       store_output(b1, VARYING_SLOT_##slot, comp, nir_type_float##bitsize, \
17                    load_uniform(b1, bitsize, index0), 0); \
18    if (is_per_vertex(b1, VARYING_SLOT_##slot, false) || \
19        MESA_SHADER_##producer_stage == MESA_SHADER_GEOMETRY) { \
20       store2 = store_output(b1, VARYING_SLOT_##slot, comp, nir_type_float##bitsize, \
21                             load_uniform(b1, bitsize, index1), 1); \
22       store3 = store_output(b1, VARYING_SLOT_##slot, comp, nir_type_float##bitsize, \
23                             load_uniform(b1, bitsize, index1), 2); \
24    } \
25    \
26    UNUSED unsigned pindex = VARYING_SLOT_##slot; \
27    unsigned cindex = VARYING_SLOT_##slot; \
28    if (MESA_SHADER_##consumer_stage == MESA_SHADER_FRAGMENT && \
29        (cindex == VARYING_SLOT_BFC0 || cindex == VARYING_SLOT_BFC1)) \
30       cindex -= VARYING_SLOT_BFC0 - VARYING_SLOT_COL0; \
31    \
32    nir_def *input = load_input(b2, (gl_varying_slot)cindex, comp, nir_type_##type##bitsize, 0, 0); \
33    store_output(b2, VARYING_SLOT_VAR0, 0, nir_type_float##bitsize, input, 0); \
34    nir_def *input2 = load_input(b2, (gl_varying_slot)cindex, comp, nir_type_##type##bitsize, 1, 0); \
35    store_output(b2, VARYING_SLOT_VAR1, 0, nir_type_float##bitsize, input2, 0); \
36    \
37    if (MESA_SHADER_##consumer_stage == MESA_SHADER_FRAGMENT) { \
38       /* Compaction moves COL1 to COL0. */ \
39       if (cindex == VARYING_SLOT_COL1) { \
40          pindex--; \
41          cindex--; \
42       } \
43       \
44       /* Compaction moves all these to VAR0. */ \
45       if (cindex == VARYING_SLOT_FOGC || cindex == VARYING_SLOT_PRIMITIVE_ID || \
46           cindex == VARYING_SLOT_VAR0_16BIT) \
47          pindex = cindex = VARYING_SLOT_VAR0; \
48    } else { \
49       /* Compaction moves everything else to POS. */ \
50       if (!is_patch((gl_varying_slot)cindex)) { \
51          pindex = cindex = VARYING_SLOT_POS; \
52       } \
53    }
54 
55 #define TEST_UNIFORM_PROP(producer_stage, consumer_stage, slot, comp, type, bitsize) \
56 TEST_F(nir_opt_varyings_test_prop_uniform, \
57        prop_##producer_stage##_##consumer_stage##_##slot##_##comp##_##type##bitsize) \
58 { \
59    SHADER_UNIFORM_OUTPUT(producer_stage, consumer_stage, slot, comp, type, bitsize, 1, 1) \
60    \
61    if (nir_slot_is_sysval_output((gl_varying_slot)pindex, MESA_SHADER_##consumer_stage)) { \
62       ASSERT_TRUE(opt_varyings() == nir_progress_consumer); \
63       ASSERT_TRUE(b1->shader->info.outputs_written == BITFIELD64_BIT(pindex)); \
64       ASSERT_TRUE(nir_intrinsic_io_semantics(store).no_varying); \
65    } else { \
66       ASSERT_TRUE(opt_varyings() == (nir_progress_producer | nir_progress_consumer)); \
67       ASSERT_TRUE(b1->shader->info.outputs_written == 0 && \
68                   b1->shader->info.patch_outputs_written == 0 && \
69                   b1->shader->info.outputs_written_16bit == 0); \
70       ASSERT_TRUE(!shader_contains_instr(b1, &store->instr)); \
71       ASSERT_TRUE(!store2 || !shader_contains_instr(b1, &store2->instr)); \
72       ASSERT_TRUE(!store3 || !shader_contains_instr(b1, &store3->instr)); \
73    } \
74    ASSERT_TRUE(b2->shader->info.inputs_read == 0 && \
75                b2->shader->info.patch_inputs_read == 0 && \
76                b2->shader->info.inputs_read_16bit == 0); \
77    ASSERT_TRUE(!shader_contains_def(b2, input)); \
78    ASSERT_TRUE(shader_contains_uniform(b2, bitsize, 1)); \
79 }
80 
81 #define TEST_UNIFORM_PROP_XFB(producer_stage, consumer_stage, slot, comp, type, bitsize) \
82 TEST_F(nir_opt_varyings_test_prop_uniform, \
83        xfb_prop_##producer_stage##_##consumer_stage##_##slot##_##comp##_##type##bitsize) \
84 { \
85    SHADER_UNIFORM_OUTPUT(producer_stage, consumer_stage, slot, comp, type, bitsize, 1, 1) \
86    \
87    /* XFB-only outputs are moved to VARn. */ \
88    if (MESA_SHADER_##consumer_stage == MESA_SHADER_FRAGMENT &&\
89        VARYING_SLOT_##slot == VARYING_SLOT_TEX0) \
90       pindex = VARYING_SLOT_VAR0; \
91    \
92    nir_io_xfb xfb; \
93    memset(&xfb, 0, sizeof(xfb)); \
94    xfb.out[comp % 2].num_components = 1; \
95    if (comp <= 1) { \
96       nir_intrinsic_set_io_xfb(store, xfb); \
97       if (store2) \
98          nir_intrinsic_set_io_xfb(store2, xfb); \
99       if (store3) \
100          nir_intrinsic_set_io_xfb(store3, xfb); \
101    } else { \
102       nir_intrinsic_set_io_xfb2(store, xfb); \
103       if (store2) \
104          nir_intrinsic_set_io_xfb2(store2, xfb); \
105       if (store3) \
106          nir_intrinsic_set_io_xfb2(store3, xfb); \
107    } \
108    \
109    ASSERT_TRUE(opt_varyings() == nir_progress_consumer); \
110    ASSERT_TRUE(b1->shader->info.outputs_written == BITFIELD64_BIT(pindex)); \
111    ASSERT_TRUE(nir_intrinsic_io_semantics(store).no_varying); \
112    ASSERT_TRUE(b2->shader->info.inputs_read == 0 && \
113                b2->shader->info.patch_inputs_read == 0 && \
114                b2->shader->info.inputs_read_16bit == 0); \
115    ASSERT_TRUE(!shader_contains_def(b2, input)); \
116    ASSERT_TRUE(shader_contains_uniform(b2, bitsize, 1)); \
117 }
118 
119 #define TEST_UNIFORM_KEPT_2VAL(producer_stage, consumer_stage, slot, comp, type, bitsize, index0, index1, suffix) \
120 TEST_F(nir_opt_varyings_test_prop_uniform, \
121        kept_##suffix##producer_stage##_##consumer_stage##_##slot##_##comp##_##type##bitsize) \
122 { \
123    SHADER_UNIFORM_OUTPUT(producer_stage, consumer_stage, slot, comp, type, bitsize, index0, index1) \
124    \
125    ASSERT_TRUE(opt_varyings() == 0); \
126    if (pindex >= VARYING_SLOT_VAR0_16BIT) { \
127       ASSERT_TRUE(b1->shader->info.outputs_written_16bit == \
128                   BITFIELD_BIT(pindex - VARYING_SLOT_VAR0_16BIT)); \
129       ASSERT_TRUE(b2->shader->info.inputs_read_16bit == \
130                   BITFIELD_BIT(cindex - VARYING_SLOT_VAR0_16BIT)); \
131    } else if (pindex >= VARYING_SLOT_PATCH0) { \
132       ASSERT_TRUE(b1->shader->info.patch_outputs_written == BITFIELD_BIT(pindex)); \
133       ASSERT_TRUE(b2->shader->info.patch_inputs_read == BITFIELD_BIT(cindex)); \
134    } else { \
135       ASSERT_TRUE(b1->shader->info.outputs_written == BITFIELD64_BIT(pindex)); \
136       ASSERT_TRUE(b2->shader->info.inputs_read == BITFIELD64_BIT(cindex)); \
137    } \
138    ASSERT_TRUE(shader_contains_instr(b1, &store->instr)); \
139    ASSERT_TRUE(shader_contains_def(b2, input)); \
140    ASSERT_TRUE(!shader_contains_uniform(b2, bitsize, 0)); \
141    ASSERT_TRUE(!shader_contains_uniform(b2, bitsize, 1)); \
142 }
143 
144 #define TEST_UNIFORM_KEPT(producer_stage, consumer_stage, slot, comp, type, bitsize) \
145    TEST_UNIFORM_KEPT_2VAL(producer_stage, consumer_stage, slot, comp, type, bitsize, 0, 0, )
146 
147 #define TEST_UNIFORM_KEPT_DIFF(producer_stage, consumer_stage, slot, comp, type, bitsize) \
148    TEST_UNIFORM_KEPT_2VAL(producer_stage, consumer_stage, slot, comp, type, bitsize, 0, 1, diff_)
149 
150 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, POS, 0, float, 32)
151 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, COL0, 0, float, 32)
152 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, COL1, 0, float, 32)
153 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, BFC0, 0, float, 32)
154 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, BFC1, 0, float, 32)
155 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, FOGC, 0, float, 32)
156 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, TEX0, 0, float, 32)
157 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, PSIZ, 0, float, 32)
158 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, CLIP_VERTEX, 0, float, 32)
159 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, CLIP_DIST0, 0, float, 32)
160 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, CLIP_DIST1, 0, float, 32)
161 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, LAYER, 0, float, 32)
162 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, VIEWPORT, 0, float, 32)
163 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, VAR0, 0, float, 32)
164 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, VAR0, 0, float, 16)
165 TEST_UNIFORM_PROP(VERTEX, TESS_CTRL, VAR0_16BIT, 0, float, 16)
166 
167 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, POS, 0, float, 32)
168 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, COL0, 0, float, 32)
169 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, COL1, 0, float, 32)
170 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, BFC0, 0, float, 32)
171 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, BFC1, 0, float, 32)
172 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, FOGC, 0, float, 32)
173 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, TEX0, 0, float, 32)
174 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, PSIZ, 0, float, 32)
175 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, CLIP_VERTEX, 0, float, 32)
176 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, CLIP_DIST0, 0, float, 32)
177 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, CLIP_DIST1, 0, float, 32)
178 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, LAYER, 0, float, 32)
179 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, VIEWPORT, 0, float, 32)
180 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, VAR0, 0, float, 32)
181 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, VAR0, 0, float, 16)
182 TEST_UNIFORM_PROP(VERTEX, TESS_EVAL, VAR0_16BIT, 0, float, 16)
183 
184 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, POS, 0, float, 32)
185 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, COL0, 0, float, 32)
186 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, COL1, 0, float, 32)
187 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, BFC0, 0, float, 32)
188 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, BFC1, 0, float, 32)
189 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, FOGC, 0, float, 32)
190 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, TEX0, 0, float, 32)
191 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, PSIZ, 0, float, 32)
192 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, CLIP_VERTEX, 0, float, 32)
193 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, CLIP_DIST0, 0, float, 32)
194 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, CLIP_DIST1, 0, float, 32)
195 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, LAYER, 0, float, 32)
196 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, VIEWPORT, 0, float, 32)
197 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, VAR0, 0, float, 32)
198 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, VAR0, 0, float, 16)
199 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, VAR0_16BIT, 0, float, 16)
200 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, TESS_LEVEL_INNER, 0, float, 32)
201 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, TESS_LEVEL_OUTER, 0, float, 32)
202 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, PATCH0, 0, float, 32)
203 TEST_UNIFORM_PROP(TESS_CTRL, TESS_EVAL, PATCH0, 0, float, 16)
204 
205 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, POS, 0, float, 32)
206 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, COL0, 0, float, 32)
207 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, COL1, 0, float, 32)
208 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, BFC0, 0, float, 32)
209 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, BFC1, 0, float, 32)
210 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, FOGC, 0, float, 32)
211 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, TEX0, 0, float, 32)
212 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, PSIZ, 0, float, 32)
213 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, CLIP_VERTEX, 0, float, 32)
214 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, CLIP_DIST0, 0, float, 32)
215 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, CLIP_DIST1, 0, float, 32)
216 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, LAYER, 0, float, 32)
217 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, VIEWPORT, 0, float, 32)
218 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, VAR0, 0, float, 32)
219 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, VAR0, 0, float, 16)
220 TEST_UNIFORM_KEPT_DIFF(TESS_CTRL, TESS_EVAL, VAR0_16BIT, 0, float, 16)
221 
222 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, POS, 0, float, 32)
223 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, COL0, 0, float, 32)
224 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, COL1, 0, float, 32)
225 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, BFC0, 0, float, 32)
226 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, BFC1, 0, float, 32)
227 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, FOGC, 0, float, 32)
228 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, TEX0, 0, float, 32)
229 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, PSIZ, 0, float, 32)
230 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, CLIP_VERTEX, 0, float, 32)
231 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, CLIP_DIST0, 0, float, 32)
232 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, CLIP_DIST1, 0, float, 32)
233 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, LAYER, 0, float, 32)
234 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, VIEWPORT, 0, float, 32)
235 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, VAR0, 0, float, 32)
236 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, VAR0, 0, float, 16)
237 TEST_UNIFORM_PROP(VERTEX, GEOMETRY, VAR0_16BIT, 0, float, 16)
238 
239 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, POS, 0, float, 32)
240 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, COL0, 0, float, 32)
241 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, COL1, 0, float, 32)
242 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, BFC0, 0, float, 32)
243 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, BFC1, 0, float, 32)
244 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, FOGC, 0, float, 32)
245 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, TEX0, 0, float, 32)
246 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, PSIZ, 0, float, 32)
247 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, CLIP_VERTEX, 0, float, 32)
248 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, CLIP_DIST0, 0, float, 32)
249 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, CLIP_DIST1, 0, float, 32)
250 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, LAYER, 0, float, 32)
251 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, VIEWPORT, 0, float, 32)
252 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, VAR0, 0, float, 32)
253 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, VAR0, 0, float, 16)
254 TEST_UNIFORM_PROP(TESS_EVAL, GEOMETRY, VAR0_16BIT, 0, float, 16)
255 
256 TEST_UNIFORM_KEPT(VERTEX, FRAGMENT, COL0, 0, float, 32)
257 TEST_UNIFORM_KEPT(VERTEX, FRAGMENT, COL1, 0, float, 32)
258 TEST_UNIFORM_KEPT(VERTEX, FRAGMENT, BFC0, 0, float, 32)
259 TEST_UNIFORM_KEPT(VERTEX, FRAGMENT, BFC1, 0, float, 32)
260 TEST_UNIFORM_PROP(VERTEX, FRAGMENT, FOGC, 0, float, 32)
261 TEST_UNIFORM_KEPT(VERTEX, FRAGMENT, TEX0, 0, float, 32)
262 TEST_UNIFORM_KEPT(VERTEX, FRAGMENT, TEX0, 2, float, 32)
263 TEST_UNIFORM_KEPT(VERTEX, FRAGMENT, TEX0, 3, float, 32)
264 TEST_UNIFORM_KEPT(VERTEX, FRAGMENT, PSIZ, 0, float, 32)
265 TEST_UNIFORM_KEPT(VERTEX, FRAGMENT, CLIP_VERTEX, 0, float, 32)
266 TEST_UNIFORM_PROP(VERTEX, FRAGMENT, CLIP_DIST0, 0, float, 32)
267 TEST_UNIFORM_PROP(VERTEX, FRAGMENT, CLIP_DIST1, 0, float, 32)
268 TEST_UNIFORM_PROP(VERTEX, FRAGMENT, CULL_DIST0, 0, float, 32)
269 TEST_UNIFORM_PROP(VERTEX, FRAGMENT, CULL_DIST1, 0, float, 32)
270 TEST_UNIFORM_PROP(VERTEX, FRAGMENT, LAYER, 0, float, 32)
271 TEST_UNIFORM_PROP(VERTEX, FRAGMENT, VIEWPORT, 0, float, 32)
272 TEST_UNIFORM_PROP(VERTEX, FRAGMENT, VAR0, 0, float, 32)
273 TEST_UNIFORM_PROP(VERTEX, FRAGMENT, VAR0, 0, float, 16)
274 TEST_UNIFORM_PROP(VERTEX, FRAGMENT, VAR0_16BIT, 0, float, 16)
275 
276 TEST_UNIFORM_PROP_XFB(VERTEX, FRAGMENT, FOGC, 0, float, 32)
277 TEST_UNIFORM_PROP_XFB(VERTEX, FRAGMENT, CLIP_DIST0, 0, float, 32)
278 TEST_UNIFORM_PROP_XFB(VERTEX, FRAGMENT, CLIP_DIST1, 0, float, 32)
279 TEST_UNIFORM_PROP_XFB(VERTEX, FRAGMENT, CULL_DIST0, 0, float, 32)
280 TEST_UNIFORM_PROP_XFB(VERTEX, FRAGMENT, CULL_DIST1, 0, float, 32)
281 TEST_UNIFORM_PROP_XFB(VERTEX, FRAGMENT, LAYER, 0, float, 32)
282 TEST_UNIFORM_PROP_XFB(VERTEX, FRAGMENT, VIEWPORT, 0, float, 32)
283 TEST_UNIFORM_PROP_XFB(VERTEX, FRAGMENT, VAR0, 0, float, 32)
284 TEST_UNIFORM_PROP_XFB(VERTEX, FRAGMENT, VAR0, 0, float, 16)
285 TEST_UNIFORM_PROP_XFB(VERTEX, FRAGMENT, VAR0_16BIT, 0, float, 16)
286 
287 TEST_UNIFORM_KEPT(TESS_EVAL, FRAGMENT, COL0, 0, float, 32)
288 TEST_UNIFORM_KEPT(TESS_EVAL, FRAGMENT, COL1, 0, float, 32)
289 TEST_UNIFORM_KEPT(TESS_EVAL, FRAGMENT, BFC0, 0, float, 32)
290 TEST_UNIFORM_KEPT(TESS_EVAL, FRAGMENT, BFC1, 0, float, 32)
291 TEST_UNIFORM_PROP(TESS_EVAL, FRAGMENT, FOGC, 0, float, 32)
292 TEST_UNIFORM_KEPT(TESS_EVAL, FRAGMENT, TEX0, 0, float, 32)
293 TEST_UNIFORM_KEPT(TESS_EVAL, FRAGMENT, TEX0, 2, float, 32)
294 TEST_UNIFORM_KEPT(TESS_EVAL, FRAGMENT, TEX0, 3, float, 32)
295 TEST_UNIFORM_KEPT(TESS_EVAL, FRAGMENT, PSIZ, 0, float, 32)
296 TEST_UNIFORM_KEPT(TESS_EVAL, FRAGMENT, CLIP_VERTEX, 0, float, 32)
297 TEST_UNIFORM_PROP(TESS_EVAL, FRAGMENT, CLIP_DIST0, 0, float, 32)
298 TEST_UNIFORM_PROP(TESS_EVAL, FRAGMENT, CLIP_DIST1, 0, float, 32)
299 TEST_UNIFORM_PROP(TESS_EVAL, FRAGMENT, CULL_DIST0, 0, float, 32)
300 TEST_UNIFORM_PROP(TESS_EVAL, FRAGMENT, CULL_DIST1, 0, float, 32)
301 TEST_UNIFORM_PROP(TESS_EVAL, FRAGMENT, LAYER, 0, float, 32)
302 TEST_UNIFORM_PROP(TESS_EVAL, FRAGMENT, VIEWPORT, 0, float, 32)
303 TEST_UNIFORM_PROP(TESS_EVAL, FRAGMENT, VAR0, 0, float, 32)
304 TEST_UNIFORM_PROP(TESS_EVAL, FRAGMENT, VAR0, 0, float, 16)
305 TEST_UNIFORM_PROP(TESS_EVAL, FRAGMENT, VAR0_16BIT, 0, float, 16)
306 
307 TEST_UNIFORM_PROP_XFB(TESS_EVAL, FRAGMENT, FOGC, 0, float, 32)
308 TEST_UNIFORM_PROP_XFB(TESS_EVAL, FRAGMENT, CLIP_DIST0, 0, float, 32)
309 TEST_UNIFORM_PROP_XFB(TESS_EVAL, FRAGMENT, CLIP_DIST1, 0, float, 32)
310 TEST_UNIFORM_PROP_XFB(TESS_EVAL, FRAGMENT, CULL_DIST0, 0, float, 32)
311 TEST_UNIFORM_PROP_XFB(TESS_EVAL, FRAGMENT, CULL_DIST1, 0, float, 32)
312 TEST_UNIFORM_PROP_XFB(TESS_EVAL, FRAGMENT, LAYER, 0, float, 32)
313 TEST_UNIFORM_PROP_XFB(TESS_EVAL, FRAGMENT, VIEWPORT, 0, float, 32)
314 TEST_UNIFORM_PROP_XFB(TESS_EVAL, FRAGMENT, VAR0, 0, float, 32)
315 TEST_UNIFORM_PROP_XFB(TESS_EVAL, FRAGMENT, VAR0, 0, float, 16)
316 TEST_UNIFORM_PROP_XFB(TESS_EVAL, FRAGMENT, VAR0_16BIT, 0, float, 16)
317 
318 TEST_UNIFORM_KEPT(GEOMETRY, FRAGMENT, COL0, 0, float, 32)
319 TEST_UNIFORM_KEPT(GEOMETRY, FRAGMENT, COL1, 0, float, 32)
320 TEST_UNIFORM_KEPT(GEOMETRY, FRAGMENT, BFC0, 0, float, 32)
321 TEST_UNIFORM_KEPT(GEOMETRY, FRAGMENT, BFC1, 0, float, 32)
322 TEST_UNIFORM_PROP(GEOMETRY, FRAGMENT, FOGC, 0, float, 32)
323 TEST_UNIFORM_KEPT(GEOMETRY, FRAGMENT, TEX0, 0, float, 32)
324 TEST_UNIFORM_KEPT(GEOMETRY, FRAGMENT, TEX0, 2, float, 32)
325 TEST_UNIFORM_KEPT(GEOMETRY, FRAGMENT, TEX0, 3, float, 32)
326 TEST_UNIFORM_KEPT(GEOMETRY, FRAGMENT, PSIZ, 0, float, 32)
327 TEST_UNIFORM_KEPT(GEOMETRY, FRAGMENT, CLIP_VERTEX, 0, float, 32)
328 TEST_UNIFORM_PROP(GEOMETRY, FRAGMENT, CLIP_DIST0, 0, float, 32)
329 TEST_UNIFORM_PROP(GEOMETRY, FRAGMENT, CLIP_DIST1, 0, float, 32)
330 TEST_UNIFORM_PROP(GEOMETRY, FRAGMENT, CULL_DIST0, 0, float, 32)
331 TEST_UNIFORM_PROP(GEOMETRY, FRAGMENT, CULL_DIST1, 0, float, 32)
332 TEST_UNIFORM_PROP(GEOMETRY, FRAGMENT, PRIMITIVE_ID, 0, float, 32)
333 TEST_UNIFORM_PROP(GEOMETRY, FRAGMENT, LAYER, 0, float, 32)
334 TEST_UNIFORM_PROP(GEOMETRY, FRAGMENT, VIEWPORT, 0, float, 32)
335 TEST_UNIFORM_PROP(GEOMETRY, FRAGMENT, VAR0, 0, float, 32)
336 TEST_UNIFORM_PROP(GEOMETRY, FRAGMENT, VAR0, 0, float, 16)
337 TEST_UNIFORM_PROP(GEOMETRY, FRAGMENT, VAR0_16BIT, 0, float, 16)
338 
339 TEST_UNIFORM_PROP_XFB(GEOMETRY, FRAGMENT, FOGC, 0, float, 32)
340 TEST_UNIFORM_PROP_XFB(GEOMETRY, FRAGMENT, CLIP_DIST0, 0, float, 32)
341 TEST_UNIFORM_PROP_XFB(GEOMETRY, FRAGMENT, CLIP_DIST1, 0, float, 32)
342 TEST_UNIFORM_PROP_XFB(GEOMETRY, FRAGMENT, CULL_DIST0, 0, float, 32)
343 TEST_UNIFORM_PROP_XFB(GEOMETRY, FRAGMENT, CULL_DIST1, 0, float, 32)
344 TEST_UNIFORM_PROP_XFB(GEOMETRY, FRAGMENT, PRIMITIVE_ID, 0, float, 32)
345 TEST_UNIFORM_PROP_XFB(GEOMETRY, FRAGMENT, LAYER, 0, float, 32)
346 TEST_UNIFORM_PROP_XFB(GEOMETRY, FRAGMENT, VIEWPORT, 0, float, 32)
347 TEST_UNIFORM_PROP_XFB(GEOMETRY, FRAGMENT, VAR0, 0, float, 32)
348 TEST_UNIFORM_PROP_XFB(GEOMETRY, FRAGMENT, VAR0, 0, float, 16)
349 TEST_UNIFORM_PROP_XFB(GEOMETRY, FRAGMENT, VAR0_16BIT, 0, float, 16)
350 
351 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, COL0, 0, float, 32)
352 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, COL1, 0, float, 32)
353 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, BFC0, 0, float, 32)
354 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, BFC1, 0, float, 32)
355 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, FOGC, 0, float, 32)
356 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, TEX0, 0, float, 32)
357 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, PSIZ, 0, float, 32)
358 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, CLIP_VERTEX, 0, float, 32)
359 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, CLIP_DIST0, 0, float, 32)
360 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, CLIP_DIST1, 0, float, 32)
361 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, CULL_DIST0, 0, float, 32)
362 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, CULL_DIST1, 0, float, 32)
363 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, PRIMITIVE_ID, 0, float, 32)
364 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, LAYER, 0, float, 32)
365 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, VIEWPORT, 0, float, 32)
366 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, VAR0, 0, float, 32)
367 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, VAR0, 0, float, 16)
368 TEST_UNIFORM_KEPT_DIFF(GEOMETRY, FRAGMENT, VAR0_16BIT, 0, float, 16)
369 
370 TEST_UNIFORM_KEPT(MESH, FRAGMENT, PSIZ, 0, float, 32)
371 TEST_UNIFORM_PROP(MESH, FRAGMENT, CLIP_DIST0, 0, float, 32)
372 TEST_UNIFORM_PROP(MESH, FRAGMENT, CLIP_DIST1, 0, float, 32)
373 TEST_UNIFORM_PROP(MESH, FRAGMENT, CULL_DIST0, 0, float, 32)
374 TEST_UNIFORM_PROP(MESH, FRAGMENT, CULL_DIST1, 0, float, 32)
375 TEST_UNIFORM_KEPT(MESH, FRAGMENT, LAYER, 0, float, 32) /* RADV mesh multiview workaround */
376 TEST_UNIFORM_PROP(MESH, FRAGMENT, VIEWPORT, 0, float, 32)
377 TEST_UNIFORM_PROP(MESH, FRAGMENT, VAR0, 0, float, 32)
378 TEST_UNIFORM_PROP(MESH, FRAGMENT, VAR0, 0, float, 16)
379 TEST_UNIFORM_PROP(MESH, FRAGMENT, VAR0_16BIT, 0, float, 16)
380 
381 }
382