xref: /aosp_15_r20/external/mesa3d/src/compiler/nir/tests/opt_varyings_tests_dead_output.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_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