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