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_dead_output : public nir_opt_varyings_test 10 {}; 11 12 #define TEST_DEAD_OUTPUT_REMOVED(producer_stage, consumer_stage, slot, bitsize) \ 13 TEST_F(nir_opt_varyings_test_dead_output, \ 14 store_##producer_stage##_##consumer_stage##_##slot##_##bitsize) \ 15 { \ 16 create_shaders(MESA_SHADER_##producer_stage, MESA_SHADER_##consumer_stage); \ 17 nir_intrinsic_instr *intr = \ 18 store_output(b1, VARYING_SLOT_##slot, 0, nir_type_float##bitsize, \ 19 nir_imm_floatN_t(b1, 0, bitsize), 0); \ 20 \ 21 ASSERT_TRUE(opt_varyings() == nir_progress_producer); \ 22 ASSERT_TRUE(b1->shader->info.outputs_written == 0 && \ 23 b1->shader->info.patch_outputs_written == 0 && \ 24 b1->shader->info.outputs_written_16bit == 0); \ 25 ASSERT_TRUE(!shader_contains_instr(b1, &intr->instr)); \ 26 } 27 28 #define TEST_DEAD_OUTPUT_KEPT(producer_stage, consumer_stage, slot, bitsize) \ 29 TEST_F(nir_opt_varyings_test_dead_output, \ 30 store_##producer_stage##_##consumer_stage##_##slot##_##bitsize) \ 31 { \ 32 create_shaders(MESA_SHADER_##producer_stage, MESA_SHADER_##consumer_stage); \ 33 nir_intrinsic_instr *intr = \ 34 store_output(b1, VARYING_SLOT_##slot, 0, nir_type_float##bitsize, \ 35 nir_imm_floatN_t(b1, 0, bitsize), 0); \ 36 \ 37 ASSERT_TRUE(opt_varyings() == 0); \ 38 ASSERT_TRUE(b1->shader->info.outputs_written == VARYING_BIT_##slot); \ 39 ASSERT_TRUE(shader_contains_instr(b1, &intr->instr)); \ 40 ASSERT_TRUE(nir_intrinsic_io_semantics(intr).no_varying == \ 41 (VARYING_SLOT_##slot != VARYING_SLOT_POS && \ 42 VARYING_SLOT_##slot != VARYING_SLOT_PSIZ && \ 43 VARYING_SLOT_##slot != VARYING_SLOT_CLIP_VERTEX)); \ 44 } 45 46 #define TEST_DEAD_OUTPUT_KEPT_XFB(producer_stage, consumer_stage, slot, bitsize) \ 47 TEST_F(nir_opt_varyings_test_dead_output, \ 48 xfb_store_##producer_stage##_##consumer_stage##_##slot##_##bitsize) \ 49 { \ 50 create_shaders(MESA_SHADER_##producer_stage, MESA_SHADER_##consumer_stage); \ 51 nir_intrinsic_instr *intr = \ 52 store_output(b1, VARYING_SLOT_##slot, 0, nir_type_float##bitsize, \ 53 nir_imm_floatN_t(b1, 0, bitsize), 0); \ 54 \ 55 struct nir_io_xfb xfb; \ 56 memset(&xfb, 0, sizeof(xfb)); \ 57 xfb.out[0].num_components = 1; \ 58 nir_intrinsic_set_io_xfb(intr, xfb); \ 59 \ 60 /* Compaction moves COL1 to COL0. */ \ 61 unsigned index = VARYING_SLOT_##slot; \ 62 if (index == VARYING_SLOT_COL1 || index == VARYING_SLOT_BFC1) \ 63 index--; \ 64 \ 65 /* Compaction moves all these to VAR0. */ \ 66 /* It's correct for TEX0 because it's not used by FS. */ \ 67 if (index == VARYING_SLOT_FOGC || index == VARYING_SLOT_PRIMITIVE_ID || \ 68 index == VARYING_SLOT_TEX0 || index == VARYING_SLOT_VAR0_16BIT) \ 69 index = VARYING_SLOT_VAR0; \ 70 \ 71 ASSERT_TRUE(opt_varyings() == 0); \ 72 if (index >= VARYING_SLOT_VAR0_16BIT) { \ 73 ASSERT_TRUE(b1->shader->info.outputs_written_16bit == \ 74 BITFIELD_BIT(index - VARYING_SLOT_VAR0_16BIT)); \ 75 } else { \ 76 ASSERT_TRUE(b1->shader->info.outputs_written == BITFIELD64_BIT(index)); \ 77 } \ 78 ASSERT_TRUE(shader_contains_instr(b1, &intr->instr)); \ 79 ASSERT_TRUE(nir_intrinsic_io_semantics(intr).no_varying == \ 80 (VARYING_SLOT_##slot != VARYING_SLOT_POS && \ 81 VARYING_SLOT_##slot != VARYING_SLOT_PSIZ && \ 82 VARYING_SLOT_##slot != VARYING_SLOT_CLIP_VERTEX)); \ 83 ASSERT_TRUE(nir_intrinsic_io_xfb(intr).out[0].num_components == 1); \ 84 } 85 86 #define TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(producer_stage, consumer_stage, slot, bitsize) \ 87 TEST_F(nir_opt_varyings_test_dead_output, \ 88 load_##producer_stage##_##consumer_stage##_##slot##_##bitsize) \ 89 { \ 90 create_shaders(MESA_SHADER_##producer_stage, MESA_SHADER_##consumer_stage); \ 91 nir_def *output = load_output(b1, VARYING_SLOT_##slot, 0, nir_type_float##bitsize, 0); \ 92 store_ssbo(b1, output); \ 93 \ 94 ASSERT_TRUE(opt_varyings() == nir_progress_producer); \ 95 ASSERT_TRUE(b1->shader->info.outputs_read == 0 && \ 96 b1->shader->info.patch_outputs_read == 0 && \ 97 b1->shader->info.outputs_read_16bit == 0); \ 98 ASSERT_TRUE(!shader_contains_def(b1, output)); \ 99 ASSERT_TRUE(shader_contains_undef(b1, bitsize)); \ 100 } 101 102 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, POS, 32) 103 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, COL0, 32) 104 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, COL1, 32) 105 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, FOGC, 32) 106 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, TEX0, 32) 107 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, PSIZ, 32) 108 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, BFC0, 32) 109 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, BFC1, 32) 110 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, CLIP_VERTEX, 32) 111 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, CLIP_DIST0, 32) 112 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, CLIP_DIST1, 32) 113 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, CULL_DIST0, 32) 114 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, CULL_DIST1, 32) 115 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, LAYER, 32) 116 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, VIEWPORT, 32) 117 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, VAR0, 32) 118 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, VAR0, 16) 119 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_CTRL, VAR0_16BIT, 16) 120 121 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, POS, 32) 122 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, COL0, 32) 123 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, COL1, 32) 124 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, FOGC, 32) 125 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, TEX0, 32) 126 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, PSIZ, 32) 127 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, BFC0, 32) 128 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, BFC1, 32) 129 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, CLIP_VERTEX, 32) 130 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, CLIP_DIST0, 32) 131 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, CLIP_DIST1, 32) 132 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, CULL_DIST0, 32) 133 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, CULL_DIST1, 32) 134 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, LAYER, 32) 135 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, VIEWPORT, 32) 136 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, VAR0, 32) 137 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, VAR0, 16) 138 TEST_DEAD_OUTPUT_REMOVED(VERTEX, TESS_EVAL, VAR0_16BIT, 16) 139 140 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, POS, 32) 141 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, COL0, 32) 142 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, COL1, 32) 143 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, FOGC, 32) 144 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, TEX0, 32) 145 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, PSIZ, 32) 146 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, BFC0, 32) 147 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, BFC1, 32) 148 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, CLIP_VERTEX, 32) 149 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, CLIP_DIST0, 32) 150 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, CLIP_DIST1, 32) 151 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, CULL_DIST0, 32) 152 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, CULL_DIST1, 32) 153 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, LAYER, 32) 154 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, VIEWPORT, 32) 155 TEST_DEAD_OUTPUT_KEPT(TESS_CTRL, TESS_EVAL, TESS_LEVEL_INNER, 32) 156 TEST_DEAD_OUTPUT_KEPT(TESS_CTRL, TESS_EVAL, TESS_LEVEL_OUTER, 32) 157 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, VAR0, 32) 158 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, VAR0, 16) 159 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, VAR0_16BIT, 16) 160 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, PATCH0, 32) 161 TEST_DEAD_OUTPUT_REMOVED(TESS_CTRL, TESS_EVAL, PATCH0, 16) 162 163 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, POS, 32) 164 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, COL0, 32) 165 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, COL1, 32) 166 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, FOGC, 32) 167 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, TEX0, 32) 168 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, PSIZ, 32) 169 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, BFC0, 32) 170 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, BFC1, 32) 171 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, CLIP_VERTEX, 32) 172 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, CLIP_DIST0, 32) 173 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, CLIP_DIST1, 32) 174 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, CULL_DIST0, 32) 175 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, CULL_DIST1, 32) 176 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, LAYER, 32) 177 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, VIEWPORT, 32) 178 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, TESS_LEVEL_INNER, 32) 179 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, TESS_LEVEL_OUTER, 32) 180 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, VAR0, 32) 181 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, VAR0, 16) 182 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, VAR0_16BIT, 16) 183 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, PATCH0, 32) 184 TEST_DEAD_OUTPUT_LOAD_TO_UNDEF(TESS_CTRL, TESS_EVAL, PATCH0, 16) 185 186 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, POS, 32) 187 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, COL0, 32) 188 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, COL1, 32) 189 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, FOGC, 32) 190 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, TEX0, 32) 191 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, PSIZ, 32) 192 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, BFC0, 32) 193 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, BFC1, 32) 194 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, CLIP_VERTEX, 32) 195 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, CLIP_DIST0, 32) 196 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, CLIP_DIST1, 32) 197 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, CULL_DIST0, 32) 198 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, CULL_DIST1, 32) 199 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, LAYER, 32) 200 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, VIEWPORT, 32) 201 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, VAR0, 32) 202 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, VAR0, 16) 203 TEST_DEAD_OUTPUT_REMOVED(VERTEX, GEOMETRY, VAR0_16BIT, 16) 204 205 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, POS, 32) 206 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, COL0, 32) 207 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, COL1, 32) 208 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, FOGC, 32) 209 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, TEX0, 32) 210 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, PSIZ, 32) 211 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, BFC0, 32) 212 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, BFC1, 32) 213 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, CLIP_VERTEX, 32) 214 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, CLIP_DIST0, 32) 215 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, CLIP_DIST1, 32) 216 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, CULL_DIST0, 32) 217 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, CULL_DIST1, 32) 218 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, LAYER, 32) 219 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, VIEWPORT, 32) 220 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, VAR0, 32) 221 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, VAR0, 16) 222 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, GEOMETRY, VAR0_16BIT, 16) 223 224 TEST_DEAD_OUTPUT_KEPT(VERTEX, FRAGMENT, POS, 32) 225 TEST_DEAD_OUTPUT_REMOVED(VERTEX, FRAGMENT, COL0, 32) 226 TEST_DEAD_OUTPUT_REMOVED(VERTEX, FRAGMENT, COL1, 32) 227 TEST_DEAD_OUTPUT_REMOVED(VERTEX, FRAGMENT, FOGC, 32) 228 TEST_DEAD_OUTPUT_REMOVED(VERTEX, FRAGMENT, TEX0, 32) 229 TEST_DEAD_OUTPUT_KEPT(VERTEX, FRAGMENT, PSIZ, 32) 230 TEST_DEAD_OUTPUT_REMOVED(VERTEX, FRAGMENT, BFC0, 32) 231 TEST_DEAD_OUTPUT_REMOVED(VERTEX, FRAGMENT, BFC1, 32) 232 TEST_DEAD_OUTPUT_KEPT(VERTEX, FRAGMENT, CLIP_VERTEX, 32) 233 TEST_DEAD_OUTPUT_KEPT(VERTEX, FRAGMENT, CLIP_DIST0, 32) 234 TEST_DEAD_OUTPUT_KEPT(VERTEX, FRAGMENT, CLIP_DIST1, 32) 235 TEST_DEAD_OUTPUT_KEPT(VERTEX, FRAGMENT, CULL_DIST0, 32) 236 TEST_DEAD_OUTPUT_KEPT(VERTEX, FRAGMENT, CULL_DIST1, 32) 237 TEST_DEAD_OUTPUT_KEPT(VERTEX, FRAGMENT, LAYER, 32) 238 TEST_DEAD_OUTPUT_KEPT(VERTEX, FRAGMENT, VIEWPORT, 32) 239 TEST_DEAD_OUTPUT_REMOVED(VERTEX, FRAGMENT, VAR0, 32) 240 TEST_DEAD_OUTPUT_REMOVED(VERTEX, FRAGMENT, VAR0, 16) 241 TEST_DEAD_OUTPUT_REMOVED(VERTEX, FRAGMENT, VAR0_16BIT, 16) 242 243 TEST_DEAD_OUTPUT_KEPT(TESS_EVAL, FRAGMENT, POS, 32) 244 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, FRAGMENT, COL0, 32) 245 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, FRAGMENT, COL1, 32) 246 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, FRAGMENT, FOGC, 32) 247 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, FRAGMENT, TEX0, 32) 248 TEST_DEAD_OUTPUT_KEPT(TESS_EVAL, FRAGMENT, PSIZ, 32) 249 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, FRAGMENT, BFC0, 32) 250 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, FRAGMENT, BFC1, 32) 251 TEST_DEAD_OUTPUT_KEPT(TESS_EVAL, FRAGMENT, CLIP_VERTEX, 32) 252 TEST_DEAD_OUTPUT_KEPT(TESS_EVAL, FRAGMENT, CLIP_DIST0, 32) 253 TEST_DEAD_OUTPUT_KEPT(TESS_EVAL, FRAGMENT, CLIP_DIST1, 32) 254 TEST_DEAD_OUTPUT_KEPT(TESS_EVAL, FRAGMENT, CULL_DIST0, 32) 255 TEST_DEAD_OUTPUT_KEPT(TESS_EVAL, FRAGMENT, CULL_DIST1, 32) 256 TEST_DEAD_OUTPUT_KEPT(TESS_EVAL, FRAGMENT, LAYER, 32) 257 TEST_DEAD_OUTPUT_KEPT(TESS_EVAL, FRAGMENT, VIEWPORT, 32) 258 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, FRAGMENT, VAR0, 32) 259 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, FRAGMENT, VAR0, 16) 260 TEST_DEAD_OUTPUT_REMOVED(TESS_EVAL, FRAGMENT, VAR0_16BIT, 16) 261 262 TEST_DEAD_OUTPUT_KEPT(GEOMETRY, FRAGMENT, POS, 32) 263 TEST_DEAD_OUTPUT_REMOVED(GEOMETRY, FRAGMENT, COL0, 32) 264 TEST_DEAD_OUTPUT_REMOVED(GEOMETRY, FRAGMENT, COL1, 32) 265 TEST_DEAD_OUTPUT_REMOVED(GEOMETRY, FRAGMENT, FOGC, 32) 266 TEST_DEAD_OUTPUT_REMOVED(GEOMETRY, FRAGMENT, TEX0, 32) 267 TEST_DEAD_OUTPUT_KEPT(GEOMETRY, FRAGMENT, PSIZ, 32) 268 TEST_DEAD_OUTPUT_REMOVED(GEOMETRY, FRAGMENT, BFC0, 32) 269 TEST_DEAD_OUTPUT_REMOVED(GEOMETRY, FRAGMENT, BFC1, 32) 270 TEST_DEAD_OUTPUT_KEPT(GEOMETRY, FRAGMENT, CLIP_VERTEX, 32) 271 TEST_DEAD_OUTPUT_KEPT(GEOMETRY, FRAGMENT, CLIP_DIST0, 32) 272 TEST_DEAD_OUTPUT_KEPT(GEOMETRY, FRAGMENT, CLIP_DIST1, 32) 273 TEST_DEAD_OUTPUT_KEPT(GEOMETRY, FRAGMENT, CULL_DIST0, 32) 274 TEST_DEAD_OUTPUT_KEPT(GEOMETRY, FRAGMENT, CULL_DIST1, 32) 275 TEST_DEAD_OUTPUT_REMOVED(GEOMETRY, FRAGMENT, PRIMITIVE_ID, 32) 276 TEST_DEAD_OUTPUT_KEPT(GEOMETRY, FRAGMENT, LAYER, 32) 277 TEST_DEAD_OUTPUT_KEPT(GEOMETRY, FRAGMENT, VIEWPORT, 32) 278 TEST_DEAD_OUTPUT_REMOVED(GEOMETRY, FRAGMENT, VAR0, 32) 279 TEST_DEAD_OUTPUT_REMOVED(GEOMETRY, FRAGMENT, VAR0, 16) 280 TEST_DEAD_OUTPUT_REMOVED(GEOMETRY, FRAGMENT, VAR0_16BIT, 16) 281 282 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, POS, 32) 283 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, COL0, 32) 284 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, COL1, 32) 285 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, FOGC, 32) 286 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, TEX0, 32) 287 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, PSIZ, 32) 288 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, BFC0, 32) 289 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, BFC1, 32) 290 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, CLIP_VERTEX, 32) 291 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, CLIP_DIST0, 32) 292 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, CLIP_DIST1, 32) 293 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, CULL_DIST0, 32) 294 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, CULL_DIST1, 32) 295 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, LAYER, 32) 296 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, VIEWPORT, 32) 297 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, VAR0, 32) 298 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, VAR0, 16) 299 TEST_DEAD_OUTPUT_KEPT_XFB(VERTEX, FRAGMENT, VAR0_16BIT, 16) 300 301 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, POS, 32) 302 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, COL0, 32) 303 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, COL1, 32) 304 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, FOGC, 32) 305 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, TEX0, 32) 306 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, PSIZ, 32) 307 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, BFC0, 32) 308 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, BFC1, 32) 309 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, CLIP_VERTEX, 32) 310 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, CLIP_DIST0, 32) 311 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, CLIP_DIST1, 32) 312 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, CULL_DIST0, 32) 313 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, CULL_DIST1, 32) 314 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, LAYER, 32) 315 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, VIEWPORT, 32) 316 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, VAR0, 32) 317 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, VAR0, 16) 318 TEST_DEAD_OUTPUT_KEPT_XFB(TESS_EVAL, FRAGMENT, VAR0_16BIT, 16) 319 320 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, POS, 32) 321 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, COL0, 32) 322 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, COL1, 32) 323 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, FOGC, 32) 324 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, TEX0, 32) 325 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, PSIZ, 32) 326 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, BFC0, 32) 327 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, BFC1, 32) 328 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, CLIP_VERTEX, 32) 329 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, CLIP_DIST0, 32) 330 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, CLIP_DIST1, 32) 331 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, CULL_DIST0, 32) 332 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, CULL_DIST1, 32) 333 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, PRIMITIVE_ID, 32) 334 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, LAYER, 32) 335 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, VIEWPORT, 32) 336 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, VAR0, 32) 337 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, VAR0, 16) 338 TEST_DEAD_OUTPUT_KEPT_XFB(GEOMETRY, FRAGMENT, VAR0_16BIT, 16) 339 340 TEST_DEAD_OUTPUT_KEPT(MESH, FRAGMENT, POS, 32) 341 TEST_DEAD_OUTPUT_KEPT(MESH, FRAGMENT, PSIZ, 32) 342 TEST_DEAD_OUTPUT_KEPT(MESH, FRAGMENT, CLIP_DIST0, 32) 343 TEST_DEAD_OUTPUT_KEPT(MESH, FRAGMENT, CLIP_DIST1, 32) 344 TEST_DEAD_OUTPUT_KEPT(MESH, FRAGMENT, CULL_DIST0, 32) 345 TEST_DEAD_OUTPUT_KEPT(MESH, FRAGMENT, CULL_DIST1, 32) 346 TEST_DEAD_OUTPUT_KEPT(MESH, FRAGMENT, LAYER, 32) 347 TEST_DEAD_OUTPUT_KEPT(MESH, FRAGMENT, VIEWPORT, 32) 348 TEST_DEAD_OUTPUT_REMOVED(MESH, FRAGMENT, VAR0, 32) 349 TEST_DEAD_OUTPUT_REMOVED(MESH, FRAGMENT, VAR0, 16) 350 TEST_DEAD_OUTPUT_REMOVED(MESH, FRAGMENT, VAR0_16BIT, 16) 351 352 } 353