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