vkd3d-shader/hlsl: Use a block in hlsl_normalize_binary_exprs().
[vkd3d.git] / tests / hlsl / hull-shader-attributes.shader_test
blob50f9ff606210e2f22f88c97ee603f43c3182cba2
1 [require]
2 shader model >= 5.0
4 [hull shader]
5 struct patch_constant_data
7     float edges[2] : SV_TessFactor;
8 };
10 patch_constant_data patch_constant()
12     return (patch_constant_data)0;
15     [domain("isoline")]
16     [outputcontrolpoints(3)]
17     [partitioning("integer")]
18     [outputtopology("point")]
19     [patchconstantfunc("patch_constant")]
20 float4 main() : POSITION
22     return 0;
25 %% Test missing attributes.
27 [hull shader fail]
28 struct patch_constant_data
30     float edges[2] : SV_TessFactor;
33 patch_constant_data patch_constant()
35     return (patch_constant_data)0;
38     //[domain("isoline")]
39     [outputcontrolpoints(3)]
40     [partitioning("integer")]
41     [outputtopology("point")]
42     [patchconstantfunc("patch_constant")]
43 float4 main() : POSITION
45     return 0;
48 % outputcontrolpoints defaults to 0 for SM >= 6.
49 [hull shader fail]
50 struct patch_constant_data
52     float edges[2] : SV_TessFactor;
55 patch_constant_data patch_constant()
57     return (patch_constant_data)0;
60     [domain("isoline")]
61     //[outputcontrolpoints(3)]
62     [partitioning("integer")]
63     [outputtopology("point")]
64     [patchconstantfunc("patch_constant")]
65 float4 main() : POSITION
67     return 0;
70 [hull shader fail]
71 struct patch_constant_data
73     float edges[2] : SV_TessFactor;
76 patch_constant_data patch_constant()
78     return (patch_constant_data)0;
81     [domain("isoline")]
82     [outputcontrolpoints(3)]
83     //[partitioning("integer")]
84     [outputtopology("point")]
85     [patchconstantfunc("patch_constant")]
86 float4 main() : POSITION
88     return 0;
91 [hull shader fail]
92 struct patch_constant_data
94     float edges[2] : SV_TessFactor;
97 patch_constant_data patch_constant()
99     return (patch_constant_data)0;
102     [domain("isoline")]
103     [outputcontrolpoints(3)]
104     [partitioning("integer")]
105     //[outputtopology("point")]
106     [patchconstantfunc("patch_constant")]
107 float4 main() : POSITION
109     return 0;
112 [hull shader fail]
113 struct patch_constant_data
115     float edges[2] : SV_TessFactor;
118 patch_constant_data patch_constant()
120     return (patch_constant_data)0;
123     [domain("isoline")]
124     [outputcontrolpoints(3)]
125     [partitioning("integer")]
126     [outputtopology("point")]
127     //[patchconstantfunc("patch_constant")]
128 float4 main() : POSITION
130     return 0;
133 %% Test valid combinations of the domain and outputtopology attributes.
135 [hull shader]
136 struct patch_constant_data
138     float edges[2] : SV_TessFactor;
141 patch_constant_data patch_constant()
143     return (patch_constant_data)0;
146     [domain("isoline")]
147     [outputcontrolpoints(3)]
148     [partitioning("integer")]
149     [outputtopology("point")]
150     [patchconstantfunc("patch_constant")]
151 float4 main() : POSITION
153     return 0;
156 [hull shader]
157 struct patch_constant_data
159     float edges[2] : SV_TessFactor;
162 patch_constant_data patch_constant()
164     return (patch_constant_data)0;
167     [domain("isoline")]
168     [outputcontrolpoints(3)]
169     [partitioning("integer")]
170     [outputtopology("line")]
171     [patchconstantfunc("patch_constant")]
172 float4 main() : POSITION
174     return 0;
177 [hull shader fail]
178 struct patch_constant_data
180     float edges[2] : SV_TessFactor;
183 patch_constant_data patch_constant()
185     return (patch_constant_data)0;
188     [domain("isoline")]
189     [outputcontrolpoints(3)]
190     [partitioning("integer")]
191     [outputtopology("triangle_cw")]
192     [patchconstantfunc("patch_constant")]
193 float4 main() : POSITION
195     return 0;
198 [hull shader fail]
199 struct patch_constant_data
201     float edges[2] : SV_TessFactor;
204 patch_constant_data patch_constant()
206     return (patch_constant_data)0;
209     [domain("isoline")]
210     [outputcontrolpoints(3)]
211     [partitioning("integer")]
212     [outputtopology("triangle_ccw")]
213     [patchconstantfunc("patch_constant")]
214 float4 main() : POSITION
216     return 0;
219 [hull shader]
220 struct patch_constant_data
222     float edges[3] : SV_TessFactor;
223     float inside : SV_InsideTessFactor;
226 patch_constant_data patch_constant()
228     return (patch_constant_data)0;
231     [domain("tri")]
232     [outputcontrolpoints(3)]
233     [partitioning("integer")]
234     [outputtopology("point")]
235     [patchconstantfunc("patch_constant")]
236 float4 main() : POSITION
238     return 0;
241 [hull shader fail]
242 struct patch_constant_data
244     float edges[3] : SV_TessFactor;
245     float inside : SV_InsideTessFactor;
248 patch_constant_data patch_constant()
250     return (patch_constant_data)0;
253     [domain("tri")]
254     [outputcontrolpoints(3)]
255     [partitioning("integer")]
256     [outputtopology("line")]
257     [patchconstantfunc("patch_constant")]
258 float4 main() : POSITION
260     return 0;
263 [hull shader]
264 struct patch_constant_data
266     float edges[3] : SV_TessFactor;
267     float inside : SV_InsideTessFactor;
270 patch_constant_data patch_constant()
272     return (patch_constant_data)0;
275     [domain("tri")]
276     [outputcontrolpoints(3)]
277     [partitioning("integer")]
278     [outputtopology("triangle_cw")]
279     [patchconstantfunc("patch_constant")]
280 float4 main() : POSITION
282     return 0;
285 [hull shader]
286 struct patch_constant_data
288     float edges[3] : SV_TessFactor;
289     float inside : SV_InsideTessFactor;
292 patch_constant_data patch_constant()
294     return (patch_constant_data)0;
297     [domain("tri")]
298     [outputcontrolpoints(3)]
299     [partitioning("integer")]
300     [outputtopology("triangle_ccw")]
301     [patchconstantfunc("patch_constant")]
302 float4 main() : POSITION
304     return 0;
307 [hull shader]
308 struct patch_constant_data
310     float edges[4] : SV_TessFactor;
311     float inside[2] : SV_InsideTessFactor;
314 patch_constant_data patch_constant()
316     return (patch_constant_data)0;
319     [domain("quad")]
320     [outputcontrolpoints(3)]
321     [partitioning("integer")]
322     [outputtopology("point")]
323     [patchconstantfunc("patch_constant")]
324 float4 main() : POSITION
326     return 0;
329 [hull shader fail]
330 struct patch_constant_data
332     float edges[4] : SV_TessFactor;
333     float inside[2] : SV_InsideTessFactor;
336 patch_constant_data patch_constant()
338     return (patch_constant_data)0;
341     [domain("quad")]
342     [outputcontrolpoints(3)]
343     [partitioning("integer")]
344     [outputtopology("line")]
345     [patchconstantfunc("patch_constant")]
346 float4 main() : POSITION
348     return 0;
351 [hull shader]
352 struct patch_constant_data
354     float edges[4] : SV_TessFactor;
355     float inside[2] : SV_InsideTessFactor;
358 patch_constant_data patch_constant()
360     return (patch_constant_data)0;
363     [domain("quad")]
364     [outputcontrolpoints(3)]
365     [partitioning("integer")]
366     [outputtopology("triangle_cw")]
367     [patchconstantfunc("patch_constant")]
368 float4 main() : POSITION
370     return 0;
373 [hull shader]
374 struct patch_constant_data
376     float edges[4] : SV_TessFactor;
377     float inside[2] : SV_InsideTessFactor;
380 patch_constant_data patch_constant()
382     return (patch_constant_data)0;
385     [domain("quad")]
386     [outputcontrolpoints(3)]
387     [partitioning("integer")]
388     [outputtopology("triangle_ccw")]
389     [patchconstantfunc("patch_constant")]
390 float4 main() : POSITION
392     return 0;
396 %% Test the valid range for outputcontrolpoints ([0, 32]).
398 [hull shader fail(sm>=6)]
399 struct patch_constant_data
401     float edges[2] : SV_TessFactor;
404 patch_constant_data patch_constant()
406     return (patch_constant_data)0;
409     [domain("isoline")]
410     [outputcontrolpoints(0)]
411     [partitioning("integer")]
412     [outputtopology("point")]
413     [patchconstantfunc("patch_constant")]
414 float4 main() : POSITION
416     return 0;
419 [hull shader]
420 struct patch_constant_data
422     float edges[2] : SV_TessFactor;
425 patch_constant_data patch_constant()
427     return (patch_constant_data)0;
430     [domain("isoline")]
431     [outputcontrolpoints(32)]
432     [partitioning("integer")]
433     [outputtopology("point")]
434     [patchconstantfunc("patch_constant")]
435 float4 main() : POSITION
437     return 0;
440 [hull shader fail]
441 struct patch_constant_data
443     float edges[2] : SV_TessFactor;
446 patch_constant_data patch_constant()
448     return (patch_constant_data)0;
451     [domain("isoline")]
452     [outputcontrolpoints(33)]
453     [partitioning("integer")]
454     [outputtopology("point")]
455     [patchconstantfunc("patch_constant")]
456 float4 main() : POSITION
458     return 0;
462 % patchconstantfunc can't point to the main function.
463 [hull shader notimpl(sm<6) fail(sm>=6)]
464 struct patch_constant_data
466     float edges[2] : SV_TessFactor;
469 patch_constant_data patch_constant()
471     return (patch_constant_data)0;
474     [domain("isoline")]
475     [outputcontrolpoints(3)]
476     [partitioning("integer")]
477     [outputtopology("point")]
478     [patchconstantfunc("main")]
479 float4 main() : POSITION
481     return 0;