• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_const : public nir_opt_varyings_test
10 {};
11 
12 #define SHADER_CONST_OUTPUT(producer_stage, consumer_stage, slot, comp, type, bitsize, val0, val1) \
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                    nir_imm_##type##N_t(b1, val0, bitsize), 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                             nir_imm_##type##N_t(b1, val1, bitsize), 1); \
22       store3 = store_output(b1, VARYING_SLOT_##slot, comp, nir_type_float##bitsize, \
23                             nir_imm_##type##N_t(b1, val1, bitsize), 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_CONST_PROP(producer_stage, consumer_stage, slot, comp, type, bitsize, value) \
56 TEST_F(nir_opt_varyings_test_prop_const, \
57        prop_##producer_stage##_##consumer_stage##_##slot##_##comp##_##type##bitsize) \
58 { \
59    SHADER_CONST_OUTPUT(producer_stage, consumer_stage, slot, comp, type, bitsize, value, value) \
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_const_##type(b2, value, bitsize)); \
79 }
80 
81 #define TEST_CONST_PROP_XFB(producer_stage, consumer_stage, slot, comp, type, bitsize, value) \
82 TEST_F(nir_opt_varyings_test_prop_const, \
83        xfb_prop_##producer_stage##_##consumer_stage##_##slot##_##comp##_##type##bitsize) \
84 { \
85    SHADER_CONST_OUTPUT(producer_stage, consumer_stage, slot, comp, type, bitsize, value, value) \
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_const_##type(b2, value, bitsize)); \
117 }
118 
119 #define TEST_CONST_KEPT_2VAL(producer_stage, consumer_stage, slot, comp, type, bitsize, val0, val1, suffix) \
120 TEST_F(nir_opt_varyings_test_prop_const, \
121        kept_##suffix##producer_stage##_##consumer_stage##_##slot##_##comp##_##type##bitsize) \
122 { \
123    SHADER_CONST_OUTPUT(producer_stage, consumer_stage, slot, comp, type, bitsize, val0, val1) \
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_const_##type(b2, val0, bitsize)); \
141    ASSERT_TRUE(!shader_contains_const_##type(b2, val1, bitsize)); \
142 }
143 
144 #define TEST_CONST_KEPT(producer_stage, consumer_stage, slot, comp, type, bitsize, value) \
145    TEST_CONST_KEPT_2VAL(producer_stage, consumer_stage, slot, comp, type, bitsize, value, value, )
146 
147 #define TEST_CONST_KEPT_DIFF(producer_stage, consumer_stage, slot, comp, type, bitsize, value) \
148    TEST_CONST_KEPT_2VAL(producer_stage, consumer_stage, slot, comp, type, bitsize, value, 0, diff_)
149 
150 TEST_CONST_PROP(VERTEX, TESS_CTRL, POS, 0, float, 32, 314)
151 TEST_CONST_PROP(VERTEX, TESS_CTRL, COL0, 0, float, 32, 314)
152 TEST_CONST_PROP(VERTEX, TESS_CTRL, COL1, 0, float, 32, 314)
153 TEST_CONST_PROP(VERTEX, TESS_CTRL, BFC0, 0, float, 32, 314)
154 TEST_CONST_PROP(VERTEX, TESS_CTRL, BFC1, 0, float, 32, 314)
155 TEST_CONST_PROP(VERTEX, TESS_CTRL, FOGC, 0, float, 32, 314)
156 TEST_CONST_PROP(VERTEX, TESS_CTRL, TEX0, 0, float, 32, 314)
157 TEST_CONST_PROP(VERTEX, TESS_CTRL, PSIZ, 0, float, 32, 314)
158 TEST_CONST_PROP(VERTEX, TESS_CTRL, CLIP_VERTEX, 0, float, 32, 314)
159 TEST_CONST_PROP(VERTEX, TESS_CTRL, CLIP_DIST0, 0, float, 32, 314)
160 TEST_CONST_PROP(VERTEX, TESS_CTRL, CLIP_DIST1, 0, float, 32, 314)
161 TEST_CONST_PROP(VERTEX, TESS_CTRL, LAYER, 0, float, 32, 314)
162 TEST_CONST_PROP(VERTEX, TESS_CTRL, VIEWPORT, 0, float, 32, 314)
163 TEST_CONST_PROP(VERTEX, TESS_CTRL, VAR0, 0, float, 32, 314)
164 TEST_CONST_PROP(VERTEX, TESS_CTRL, VAR0, 0, float, 16, 314)
165 TEST_CONST_PROP(VERTEX, TESS_CTRL, VAR0_16BIT, 0, float, 16, 314)
166 
167 TEST_CONST_PROP(VERTEX, TESS_EVAL, POS, 0, float, 32, 314)
168 TEST_CONST_PROP(VERTEX, TESS_EVAL, COL0, 0, float, 32, 314)
169 TEST_CONST_PROP(VERTEX, TESS_EVAL, COL1, 0, float, 32, 314)
170 TEST_CONST_PROP(VERTEX, TESS_EVAL, BFC0, 0, float, 32, 314)
171 TEST_CONST_PROP(VERTEX, TESS_EVAL, BFC1, 0, float, 32, 314)
172 TEST_CONST_PROP(VERTEX, TESS_EVAL, FOGC, 0, float, 32, 314)
173 TEST_CONST_PROP(VERTEX, TESS_EVAL, TEX0, 0, float, 32, 314)
174 TEST_CONST_PROP(VERTEX, TESS_EVAL, PSIZ, 0, float, 32, 314)
175 TEST_CONST_PROP(VERTEX, TESS_EVAL, CLIP_VERTEX, 0, float, 32, 314)
176 TEST_CONST_PROP(VERTEX, TESS_EVAL, CLIP_DIST0, 0, float, 32, 314)
177 TEST_CONST_PROP(VERTEX, TESS_EVAL, CLIP_DIST1, 0, float, 32, 314)
178 TEST_CONST_PROP(VERTEX, TESS_EVAL, LAYER, 0, float, 32, 314)
179 TEST_CONST_PROP(VERTEX, TESS_EVAL, VIEWPORT, 0, float, 32, 314)
180 TEST_CONST_PROP(VERTEX, TESS_EVAL, VAR0, 0, float, 32, 314)
181 TEST_CONST_PROP(VERTEX, TESS_EVAL, VAR0, 0, float, 16, 314)
182 TEST_CONST_PROP(VERTEX, TESS_EVAL, VAR0_16BIT, 0, float, 16, 314)
183 
184 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, POS, 0, float, 32, 314)
185 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, COL0, 0, float, 32, 314)
186 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, COL1, 0, float, 32, 314)
187 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, BFC0, 0, float, 32, 314)
188 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, BFC1, 0, float, 32, 314)
189 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, FOGC, 0, float, 32, 314)
190 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, TEX0, 0, float, 32, 314)
191 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, PSIZ, 0, float, 32, 314)
192 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, CLIP_VERTEX, 0, float, 32, 314)
193 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, CLIP_DIST0, 0, float, 32, 314)
194 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, CLIP_DIST1, 0, float, 32, 314)
195 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, LAYER, 0, float, 32, 314)
196 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, VIEWPORT, 0, float, 32, 314)
197 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, VAR0, 0, float, 32, 314)
198 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, VAR0, 0, float, 16, 314)
199 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, VAR0_16BIT, 0, float, 16, 314)
200 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, TESS_LEVEL_INNER, 0, float, 32, 314)
201 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, TESS_LEVEL_OUTER, 0, float, 32, 314)
202 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, PATCH0, 0, float, 32, 314)
203 TEST_CONST_PROP(TESS_CTRL, TESS_EVAL, PATCH0, 0, float, 16, 314)
204 
205 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, POS, 0, float, 32, 314)
206 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, COL0, 0, float, 32, 314)
207 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, COL1, 0, float, 32, 314)
208 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, BFC0, 0, float, 32, 314)
209 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, BFC1, 0, float, 32, 314)
210 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, FOGC, 0, float, 32, 314)
211 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, TEX0, 0, float, 32, 314)
212 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, PSIZ, 0, float, 32, 314)
213 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, CLIP_VERTEX, 0, float, 32, 314)
214 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, CLIP_DIST0, 0, float, 32, 314)
215 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, CLIP_DIST1, 0, float, 32, 314)
216 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, LAYER, 0, float, 32, 314)
217 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, VIEWPORT, 0, float, 32, 314)
218 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, VAR0, 0, float, 32, 314)
219 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, VAR0, 0, float, 16, 314)
220 TEST_CONST_KEPT_DIFF(TESS_CTRL, TESS_EVAL, VAR0_16BIT, 0, float, 16, 314)
221 
222 TEST_CONST_PROP(VERTEX, GEOMETRY, POS, 0, float, 32, 314)
223 TEST_CONST_PROP(VERTEX, GEOMETRY, COL0, 0, float, 32, 314)
224 TEST_CONST_PROP(VERTEX, GEOMETRY, COL1, 0, float, 32, 314)
225 TEST_CONST_PROP(VERTEX, GEOMETRY, BFC0, 0, float, 32, 314)
226 TEST_CONST_PROP(VERTEX, GEOMETRY, BFC1, 0, float, 32, 314)
227 TEST_CONST_PROP(VERTEX, GEOMETRY, FOGC, 0, float, 32, 314)
228 TEST_CONST_PROP(VERTEX, GEOMETRY, TEX0, 0, float, 32, 314)
229 TEST_CONST_PROP(VERTEX, GEOMETRY, PSIZ, 0, float, 32, 314)
230 TEST_CONST_PROP(VERTEX, GEOMETRY, CLIP_VERTEX, 0, float, 32, 314)
231 TEST_CONST_PROP(VERTEX, GEOMETRY, CLIP_DIST0, 0, float, 32, 314)
232 TEST_CONST_PROP(VERTEX, GEOMETRY, CLIP_DIST1, 0, float, 32, 314)
233 TEST_CONST_PROP(VERTEX, GEOMETRY, LAYER, 0, float, 32, 314)
234 TEST_CONST_PROP(VERTEX, GEOMETRY, VIEWPORT, 0, float, 32, 314)
235 TEST_CONST_PROP(VERTEX, GEOMETRY, VAR0, 0, float, 32, 314)
236 TEST_CONST_PROP(VERTEX, GEOMETRY, VAR0, 0, float, 16, 314)
237 TEST_CONST_PROP(VERTEX, GEOMETRY, VAR0_16BIT, 0, float, 16, 314)
238 
239 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, POS, 0, float, 32, 314)
240 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, COL0, 0, float, 32, 314)
241 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, COL1, 0, float, 32, 314)
242 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, BFC0, 0, float, 32, 314)
243 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, BFC1, 0, float, 32, 314)
244 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, FOGC, 0, float, 32, 314)
245 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, TEX0, 0, float, 32, 314)
246 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, PSIZ, 0, float, 32, 314)
247 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, CLIP_VERTEX, 0, float, 32, 314)
248 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, CLIP_DIST0, 0, float, 32, 314)
249 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, CLIP_DIST1, 0, float, 32, 314)
250 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, LAYER, 0, float, 32, 314)
251 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, VIEWPORT, 0, float, 32, 314)
252 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, VAR0, 0, float, 32, 314)
253 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, VAR0, 0, float, 16, 314)
254 TEST_CONST_PROP(TESS_EVAL, GEOMETRY, VAR0_16BIT, 0, float, 16, 314)
255 
256 TEST_CONST_PROP(VERTEX, FRAGMENT, COL0, 0, float, 32, 0.14)
257 TEST_CONST_PROP(VERTEX, FRAGMENT, COL1, 0, float, 32, 0.14)
258 TEST_CONST_PROP(VERTEX, FRAGMENT, BFC0, 0, float, 32, 0.14)
259 TEST_CONST_PROP(VERTEX, FRAGMENT, BFC1, 0, float, 32, 0.14)
260 TEST_CONST_PROP(VERTEX, FRAGMENT, TEX0, 2, float, 32, 0)
261 TEST_CONST_PROP(VERTEX, FRAGMENT, TEX0, 3, float, 32, 1)
262 
263 TEST_CONST_KEPT(VERTEX, FRAGMENT, COL0, 0, float, 32, 314)
264 TEST_CONST_KEPT(VERTEX, FRAGMENT, COL1, 0, float, 32, 314)
265 TEST_CONST_KEPT(VERTEX, FRAGMENT, BFC0, 0, float, 32, 314)
266 TEST_CONST_KEPT(VERTEX, FRAGMENT, BFC1, 0, float, 32, 314)
267 TEST_CONST_PROP(VERTEX, FRAGMENT, FOGC, 0, float, 32, 314)
268 TEST_CONST_KEPT(VERTEX, FRAGMENT, TEX0, 0, float, 32, 314)
269 TEST_CONST_KEPT(VERTEX, FRAGMENT, PSIZ, 0, float, 32, 314)
270 TEST_CONST_KEPT(VERTEX, FRAGMENT, CLIP_VERTEX, 0, float, 32, 314)
271 TEST_CONST_PROP(VERTEX, FRAGMENT, CLIP_DIST0, 0, float, 32, 314)
272 TEST_CONST_PROP(VERTEX, FRAGMENT, CLIP_DIST1, 0, float, 32, 314)
273 TEST_CONST_PROP(VERTEX, FRAGMENT, CULL_DIST0, 0, float, 32, 314)
274 TEST_CONST_PROP(VERTEX, FRAGMENT, CULL_DIST1, 0, float, 32, 314)
275 TEST_CONST_PROP(VERTEX, FRAGMENT, LAYER, 0, float, 32, 314)
276 TEST_CONST_PROP(VERTEX, FRAGMENT, VIEWPORT, 0, float, 32, 314)
277 TEST_CONST_PROP(VERTEX, FRAGMENT, VAR0, 0, float, 32, 314)
278 TEST_CONST_PROP(VERTEX, FRAGMENT, VAR0, 0, float, 16, 314)
279 TEST_CONST_PROP(VERTEX, FRAGMENT, VAR0_16BIT, 0, float, 16, 314)
280 
281 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, COL0, 0, float, 32, 0.14)
282 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, COL1, 0, float, 32, 0.14)
283 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, BFC0, 0, float, 32, 0.14)
284 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, BFC1, 0, float, 32, 0.14)
285 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, TEX0, 2, float, 32, 0)
286 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, TEX0, 3, float, 32, 1)
287 
288 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, FOGC, 0, float, 32, 314)
289 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, CLIP_DIST0, 0, float, 32, 314)
290 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, CLIP_DIST1, 0, float, 32, 314)
291 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, CULL_DIST0, 0, float, 32, 314)
292 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, CULL_DIST1, 0, float, 32, 314)
293 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, LAYER, 0, float, 32, 314)
294 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, VIEWPORT, 0, float, 32, 314)
295 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, VAR0, 0, float, 32, 314)
296 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, VAR0, 0, float, 16, 314)
297 TEST_CONST_PROP_XFB(VERTEX, FRAGMENT, VAR0_16BIT, 0, float, 16, 314)
298 
299 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, COL0, 0, float, 32, 0.14)
300 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, COL1, 0, float, 32, 0.14)
301 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, BFC0, 0, float, 32, 0.14)
302 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, BFC1, 0, float, 32, 0.14)
303 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, TEX0, 2, float, 32, 0)
304 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, TEX0, 3, float, 32, 1)
305 
306 TEST_CONST_KEPT(TESS_EVAL, FRAGMENT, COL0, 0, float, 32, 314)
307 TEST_CONST_KEPT(TESS_EVAL, FRAGMENT, COL1, 0, float, 32, 314)
308 TEST_CONST_KEPT(TESS_EVAL, FRAGMENT, BFC0, 0, float, 32, 314)
309 TEST_CONST_KEPT(TESS_EVAL, FRAGMENT, BFC1, 0, float, 32, 314)
310 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, FOGC, 0, float, 32, 314)
311 TEST_CONST_KEPT(TESS_EVAL, FRAGMENT, TEX0, 0, float, 32, 314)
312 TEST_CONST_KEPT(TESS_EVAL, FRAGMENT, PSIZ, 0, float, 32, 314)
313 TEST_CONST_KEPT(TESS_EVAL, FRAGMENT, CLIP_VERTEX, 0, float, 32, 314)
314 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, CLIP_DIST0, 0, float, 32, 314)
315 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, CLIP_DIST1, 0, float, 32, 314)
316 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, CULL_DIST0, 0, float, 32, 314)
317 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, CULL_DIST1, 0, float, 32, 314)
318 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, LAYER, 0, float, 32, 314)
319 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, VIEWPORT, 0, float, 32, 314)
320 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, VAR0, 0, float, 32, 314)
321 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, VAR0, 0, float, 16, 314)
322 TEST_CONST_PROP(TESS_EVAL, FRAGMENT, VAR0_16BIT, 0, float, 16, 314)
323 
324 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, COL0, 0, float, 32, 0.14)
325 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, COL1, 0, float, 32, 0.14)
326 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, BFC0, 0, float, 32, 0.14)
327 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, BFC1, 0, float, 32, 0.14)
328 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, TEX0, 2, float, 32, 0)
329 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, TEX0, 3, float, 32, 1)
330 
331 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, FOGC, 0, float, 32, 314)
332 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, CLIP_DIST0, 0, float, 32, 314)
333 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, CLIP_DIST1, 0, float, 32, 314)
334 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, CULL_DIST0, 0, float, 32, 314)
335 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, CULL_DIST1, 0, float, 32, 314)
336 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, LAYER, 0, float, 32, 314)
337 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, VIEWPORT, 0, float, 32, 314)
338 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, VAR0, 0, float, 32, 314)
339 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, VAR0, 0, float, 16, 314)
340 TEST_CONST_PROP_XFB(TESS_EVAL, FRAGMENT, VAR0_16BIT, 0, float, 16, 314)
341 
342 TEST_CONST_PROP(GEOMETRY, FRAGMENT, COL0, 0, float, 32, 0.14)
343 TEST_CONST_PROP(GEOMETRY, FRAGMENT, COL1, 0, float, 32, 0.14)
344 TEST_CONST_PROP(GEOMETRY, FRAGMENT, BFC0, 0, float, 32, 0.14)
345 TEST_CONST_PROP(GEOMETRY, FRAGMENT, BFC1, 0, float, 32, 0.14)
346 TEST_CONST_PROP(GEOMETRY, FRAGMENT, TEX0, 2, float, 32, 0)
347 TEST_CONST_PROP(GEOMETRY, FRAGMENT, TEX0, 3, float, 32, 1)
348 
349 TEST_CONST_KEPT(GEOMETRY, FRAGMENT, COL0, 0, float, 32, 314)
350 TEST_CONST_KEPT(GEOMETRY, FRAGMENT, COL1, 0, float, 32, 314)
351 TEST_CONST_KEPT(GEOMETRY, FRAGMENT, BFC0, 0, float, 32, 314)
352 TEST_CONST_KEPT(GEOMETRY, FRAGMENT, BFC1, 0, float, 32, 314)
353 TEST_CONST_PROP(GEOMETRY, FRAGMENT, FOGC, 0, float, 32, 314)
354 TEST_CONST_KEPT(GEOMETRY, FRAGMENT, TEX0, 0, float, 32, 314)
355 TEST_CONST_KEPT(GEOMETRY, FRAGMENT, PSIZ, 0, float, 32, 314)
356 TEST_CONST_KEPT(GEOMETRY, FRAGMENT, CLIP_VERTEX, 0, float, 32, 314)
357 TEST_CONST_PROP(GEOMETRY, FRAGMENT, CLIP_DIST0, 0, float, 32, 314)
358 TEST_CONST_PROP(GEOMETRY, FRAGMENT, CLIP_DIST1, 0, float, 32, 314)
359 TEST_CONST_PROP(GEOMETRY, FRAGMENT, CULL_DIST0, 0, float, 32, 314)
360 TEST_CONST_PROP(GEOMETRY, FRAGMENT, CULL_DIST1, 0, float, 32, 314)
361 TEST_CONST_PROP(GEOMETRY, FRAGMENT, PRIMITIVE_ID, 0, float, 32, 314)
362 TEST_CONST_PROP(GEOMETRY, FRAGMENT, LAYER, 0, float, 32, 314)
363 TEST_CONST_PROP(GEOMETRY, FRAGMENT, VIEWPORT, 0, float, 32, 314)
364 TEST_CONST_PROP(GEOMETRY, FRAGMENT, VAR0, 0, float, 32, 314)
365 TEST_CONST_PROP(GEOMETRY, FRAGMENT, VAR0, 0, float, 16, 314)
366 TEST_CONST_PROP(GEOMETRY, FRAGMENT, VAR0_16BIT, 0, float, 16, 314)
367 
368 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, COL0, 0, float, 32, 0.14)
369 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, COL1, 0, float, 32, 0.14)
370 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, BFC0, 0, float, 32, 0.14)
371 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, BFC1, 0, float, 32, 0.14)
372 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, TEX0, 2, float, 32, 0)
373 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, TEX0, 3, float, 32, 1)
374 
375 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, FOGC, 0, float, 32, 314)
376 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, CLIP_DIST0, 0, float, 32, 314)
377 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, CLIP_DIST1, 0, float, 32, 314)
378 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, CULL_DIST0, 0, float, 32, 314)
379 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, CULL_DIST1, 0, float, 32, 314)
380 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, PRIMITIVE_ID, 0, float, 32, 314)
381 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, LAYER, 0, float, 32, 314)
382 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, VIEWPORT, 0, float, 32, 314)
383 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, VAR0, 0, float, 32, 314)
384 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, VAR0, 0, float, 16, 314)
385 TEST_CONST_PROP_XFB(GEOMETRY, FRAGMENT, VAR0_16BIT, 0, float, 16, 314)
386 
387 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, COL0, 0, float, 32, 0.14)
388 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, COL1, 0, float, 32, 0.14)
389 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, BFC0, 0, float, 32, 0.14)
390 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, BFC1, 0, float, 32, 0.14)
391 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, FOGC, 0, float, 32, 314)
392 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, TEX0, 0, float, 32, 314)
393 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, PSIZ, 0, float, 32, 314)
394 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, CLIP_VERTEX, 0, float, 32, 314)
395 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, CLIP_DIST0, 0, float, 32, 314)
396 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, CLIP_DIST1, 0, float, 32, 314)
397 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, CULL_DIST0, 0, float, 32, 314)
398 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, CULL_DIST1, 0, float, 32, 314)
399 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, PRIMITIVE_ID, 0, float, 32, 314)
400 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, LAYER, 0, float, 32, 314)
401 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, VIEWPORT, 0, float, 32, 314)
402 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, VAR0, 0, float, 32, 314)
403 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, VAR0, 0, float, 16, 314)
404 TEST_CONST_KEPT_DIFF(GEOMETRY, FRAGMENT, VAR0_16BIT, 0, float, 16, 314)
405 
406 TEST_CONST_KEPT(MESH, FRAGMENT, PSIZ, 0, float, 32, 314)
407 TEST_CONST_PROP(MESH, FRAGMENT, CLIP_DIST0, 0, float, 32, 314)
408 TEST_CONST_PROP(MESH, FRAGMENT, CLIP_DIST1, 0, float, 32, 314)
409 TEST_CONST_PROP(MESH, FRAGMENT, CULL_DIST0, 0, float, 32, 314)
410 TEST_CONST_PROP(MESH, FRAGMENT, CULL_DIST1, 0, float, 32, 314)
411 TEST_CONST_PROP(MESH, FRAGMENT, LAYER, 0, float, 32, 314)
412 TEST_CONST_PROP(MESH, FRAGMENT, VIEWPORT, 0, float, 32, 314)
413 TEST_CONST_PROP(MESH, FRAGMENT, VAR0, 0, float, 32, 314)
414 TEST_CONST_PROP(MESH, FRAGMENT, VAR0, 0, float, 16, 314)
415 TEST_CONST_PROP(MESH, FRAGMENT, VAR0_16BIT, 0, float, 16, 314)
416 
417 }
418