1pub struct SlangProgram {
46 pub file: &'static str,
49 pub entry: &'static str,
51 pub profile: &'static str,
53 pub label: &'static str,
55 pub defines: &'static [(&'static str, &'static str)],
57}
58
59const MAIN_DEFINES: &[(&str, &str)] = &[("DXIL_ABI", "1"), ("MAX_PROBES", "8")];
65
66const SSR_DEFINES: &[(&str, &str)] = &[("MAX_PROBES", "8"), ("SPLIT_PROBE_SAMPLER", "1")];
73
74pub static MAIN_BINDLESS_VERT: SlangProgram = SlangProgram {
76 file: "main_bindless.slang",
77 entry: "vertex_main_bindless",
78 profile: "vs_6_0",
79 label: "vert_bindless.slang",
80 defines: MAIN_DEFINES,
81};
82pub static MAIN_BINDLESS_FRAG: SlangProgram = SlangProgram {
84 file: "main_bindless.slang",
85 entry: "fragment_main_bindless",
86 profile: "ps_6_0",
87 label: "frag_bindless.slang",
88 defines: MAIN_DEFINES,
89};
90pub static LIGHT_CULL: SlangProgram = SlangProgram {
92 file: "light_cull.slang",
93 entry: "light_cull_kernel",
94 profile: "cs_6_0",
95 label: "light_cull.slang",
96 defines: &[],
97};
98pub static HIZ_INIT_SINGLE: SlangProgram = SlangProgram {
100 file: "hiz_build.slang",
101 entry: "hiz_init_single",
102 profile: "cs_6_0",
103 label: "hiz_init_single.slang",
104 defines: &[("HIZ_INIT_SINGLE", "1")],
105};
106pub static HIZ_INIT_MSAA: SlangProgram = SlangProgram {
108 file: "hiz_build.slang",
109 entry: "hiz_init_msaa",
110 profile: "cs_6_0",
111 label: "hiz_init_msaa.slang",
112 defines: &[("HIZ_INIT_MSAA", "1")],
113};
114pub static HIZ_DOWNSAMPLE: SlangProgram = SlangProgram {
116 file: "hiz_build.slang",
117 entry: "hiz_downsample",
118 profile: "cs_6_0",
119 label: "hiz_downsample.slang",
120 defines: &[("HIZ_DOWNSAMPLE", "1")],
121};
122
123const GB_STATIC: &[(&str, &str)] = &[("GB_STATIC", "1"), ("DXIL_ABI", "1")];
128const GB_INSTANCED: &[(&str, &str)] = &[("GB_INSTANCED", "1"), ("DXIL_ABI", "1")];
129const GB_SKINNED: &[(&str, &str)] = &[("GB_SKINNED", "1"), ("DXIL_ABI", "1")];
130const GB_BINDLESS: &[(&str, &str)] = &[("GB_BINDLESS", "1"), ("DXIL_ABI", "1")];
131const GB_FRAGMENT: &[(&str, &str)] = &[("GB_FRAGMENT", "1"), ("DXIL_ABI", "1")];
132const GB_FRAGMENT_BINDLESS: &[(&str, &str)] = &[("GB_FRAGMENT_BINDLESS", "1"), ("DXIL_ABI", "1")];
133const SHADOW_STATIC: &[(&str, &str)] = &[("SHADOW_STATIC", "1"), ("DXIL_ABI", "1")];
134const SHADOW_SKINNED: &[(&str, &str)] = &[("SHADOW_SKINNED", "1"), ("DXIL_ABI", "1")];
135const SHADOW_BINDLESS: &[(&str, &str)] = &[("SHADOW_BINDLESS", "1"), ("DXIL_ABI", "1")];
136
137pub static GBUFFER_PREPASS_VERT: SlangProgram = SlangProgram {
139 file: "gbuffer_prepass.slang",
140 entry: "gbuffer_prepass_vertex",
141 profile: "vs_6_0",
142 label: "gbuffer_prepass_vert.slang",
143 defines: GB_STATIC,
144};
145pub static GBUFFER_PREPASS_VERT_INSTANCED: SlangProgram = SlangProgram {
147 file: "gbuffer_prepass.slang",
148 entry: "gbuffer_prepass_vertex_instanced",
149 profile: "vs_6_0",
150 label: "gbuffer_prepass_vert_instanced.slang",
151 defines: GB_INSTANCED,
152};
153pub static GBUFFER_PREPASS_VERT_SKINNED: SlangProgram = SlangProgram {
155 file: "gbuffer_prepass.slang",
156 entry: "gbuffer_prepass_vertex_skinned",
157 profile: "vs_6_0",
158 label: "gbuffer_prepass_vert_skinned.slang",
159 defines: GB_SKINNED,
160};
161pub static GBUFFER_BINDLESS_VERT: SlangProgram = SlangProgram {
163 file: "gbuffer_prepass.slang",
164 entry: "gbuffer_prepass_vertex_bindless",
165 profile: "vs_6_0",
166 label: "gbuffer_prepass_vert_bindless.slang",
167 defines: GB_BINDLESS,
168};
169pub static GBUFFER_PREPASS_FRAG: SlangProgram = SlangProgram {
171 file: "gbuffer_prepass.slang",
172 entry: "gbuffer_prepass_fragment",
173 profile: "ps_6_0",
174 label: "gbuffer_prepass_frag.slang",
175 defines: GB_FRAGMENT,
176};
177pub static GBUFFER_BINDLESS_FRAG: SlangProgram = SlangProgram {
179 file: "gbuffer_prepass.slang",
180 entry: "gbuffer_prepass_fragment_bindless",
181 profile: "ps_6_0",
182 label: "gbuffer_prepass_frag_bindless.slang",
183 defines: GB_FRAGMENT_BINDLESS,
184};
185pub static SHADOW_VERT: SlangProgram = SlangProgram {
187 file: "shadow.slang",
188 entry: "shadow_vertex_main",
189 profile: "vs_6_0",
190 label: "shadow_vert.slang",
191 defines: SHADOW_STATIC,
192};
193pub static SKINNED_SHADOW_VERT: SlangProgram = SlangProgram {
195 file: "shadow.slang",
196 entry: "shadow_vertex_main_skinned",
197 profile: "vs_6_0",
198 label: "shadow_vert_skinned.slang",
199 defines: SHADOW_SKINNED,
200};
201pub static SHADOW_BINDLESS_VERT: SlangProgram = SlangProgram {
203 file: "shadow.slang",
204 entry: "shadow_vertex_bindless",
205 profile: "vs_6_0",
206 label: "shadow_vert_bindless.slang",
207 defines: SHADOW_BINDLESS,
208};
209
210const FOG_FROXEL_DEFINES: &[(&str, &str)] = &[("FOG_FROXEL", "1"), ("DXIL_SPLIT", "1")];
225
226pub static FOG_FROXEL: SlangProgram = SlangProgram {
228 file: "fog.slang",
229 entry: "fog_froxel_kernel",
230 profile: "cs_6_0",
231 label: "fog_froxel.slang",
232 defines: FOG_FROXEL_DEFINES,
233};
234
235pub static FOG_FRAG: SlangProgram = SlangProgram {
241 file: "fog.slang",
242 entry: "fog_fragment",
243 profile: "ps_6_0",
244 label: "fog_frag.slang",
245 defines: &[("USE_MSAA", "0"), ("DXIL_STAGE_PACKING", "1")],
246};
247pub static FOG_FRAG_MSAA: SlangProgram = SlangProgram {
249 file: "fog.slang",
250 entry: "fog_fragment",
251 profile: "ps_6_0",
252 label: "fog_frag_msaa.slang",
253 defines: &[("USE_MSAA", "1"), ("DXIL_STAGE_PACKING", "1")],
254};
255
256pub static AUTO_EXPOSURE_BUILD: SlangProgram = SlangProgram {
258 file: "auto_exposure.slang",
259 entry: "histogram_build",
260 profile: "cs_6_0",
261 label: "auto_exposure_build.slang",
262 defines: &[("AE_BUILD", "1")],
263};
264pub static AUTO_EXPOSURE_AVERAGE: SlangProgram = SlangProgram {
266 file: "auto_exposure.slang",
267 entry: "histogram_average",
268 profile: "cs_6_0",
269 label: "auto_exposure_average.slang",
270 defines: &[("AE_AVERAGE", "1")],
271};
272
273pub static RT_SKIN: SlangProgram = SlangProgram {
277 file: "rt_skin.slang",
278 entry: "rt_skin",
279 profile: "cs_6_5",
280 label: "rt_skin.slang",
281 defines: &[],
282};
283
284pub static PARTICLE_SIMULATE: SlangProgram = SlangProgram {
286 file: "particle_simulate.slang",
287 entry: "particle_simulate",
288 profile: "cs_6_0",
289 label: "particle_simulate.slang",
290 defines: &[],
291};
292
293pub static FULLSCREEN_VERT: SlangProgram = SlangProgram {
297 file: "fullscreen.slang",
298 entry: "fullscreen_vertex",
299 profile: "vs_6_0",
300 label: "fullscreen_vert.slang",
301 defines: &[],
302};
303pub static TAA_FRAG: SlangProgram = SlangProgram {
305 file: "taa.slang",
306 entry: "taa_fragment_main",
307 profile: "ps_6_0",
308 label: "taa_frag.slang",
309 defines: &[],
310};
311pub static BLOOM_PREFILTER: SlangProgram = SlangProgram {
313 file: "bloom.slang",
314 entry: "bloom_prefilter_fragment",
315 profile: "ps_6_0",
316 label: "bloom_prefilter.slang",
317 defines: &[("BLOOM_PREFILTER", "1")],
318};
319pub static BLOOM_DOWNSAMPLE: SlangProgram = SlangProgram {
321 file: "bloom.slang",
322 entry: "bloom_downsample_fragment",
323 profile: "ps_6_0",
324 label: "bloom_downsample.slang",
325 defines: &[("BLOOM_DOWNSAMPLE", "1")],
326};
327pub static BLOOM_UPSAMPLE: SlangProgram = SlangProgram {
329 file: "bloom.slang",
330 entry: "bloom_upsample_fragment",
331 profile: "ps_6_0",
332 label: "bloom_upsample.slang",
333 defines: &[("BLOOM_UPSAMPLE", "1")],
334};
335pub static COMPOSITE_FRAG: SlangProgram = SlangProgram {
337 file: "composite.slang",
338 entry: "composite_fragment",
339 profile: "ps_6_0",
340 label: "composite_frag.slang",
341 defines: &[],
342};
343pub static SSAO_KERNEL: SlangProgram = SlangProgram {
345 file: "ssao.slang",
346 entry: "ssao_kernel_fragment",
347 profile: "ps_6_0",
348 label: "ssao_kernel.slang",
349 defines: &[("SSAO_KERNEL", "1")],
350};
351pub static SSAO_BLUR: SlangProgram = SlangProgram {
353 file: "ssao.slang",
354 entry: "ssao_blur_fragment",
355 profile: "ps_6_0",
356 label: "ssao_blur.slang",
357 defines: &[("SSAO_BLUR", "1")],
358};
359pub static SSR_RESOLVE: SlangProgram = SlangProgram {
361 file: "ssr.slang",
362 entry: "ssr_resolve_fragment",
363 profile: "ps_6_0",
364 label: "ssr_resolve.slang",
365 defines: SSR_DEFINES,
366};
367pub static SSGI_GATHER: SlangProgram = SlangProgram {
369 file: "ssgi.slang",
370 entry: "ssgi_gather_fragment",
371 profile: "ps_6_0",
372 label: "ssgi_gather.slang",
373 defines: &[("SSGI_GATHER", "1")],
374};
375pub static SSGI_COMPOSITE: SlangProgram = SlangProgram {
377 file: "ssgi.slang",
378 entry: "ssgi_composite_fragment",
379 profile: "ps_6_0",
380 label: "ssgi_composite.slang",
381 defines: &[("SSGI_COMPOSITE", "1")],
382};
383pub static REFLECTION_BLUR: SlangProgram = SlangProgram {
385 file: "reflection.slang",
386 entry: "reflection_blur_fragment",
387 profile: "ps_6_0",
388 label: "reflection_blur.slang",
389 defines: &[("REFLECTION_BLUR", "1")],
390};
391pub static REFLECTION_COMPOSITE: SlangProgram = SlangProgram {
393 file: "reflection.slang",
394 entry: "reflection_composite_fragment",
395 profile: "ps_6_0",
396 label: "reflection_composite.slang",
397 defines: &[("REFLECTION_COMPOSITE", "1")],
398};
399
400pub static RT_REFLECTIONS_FRAG: SlangProgram = SlangProgram {
417 file: "rt_reflections.slang",
418 entry: "rt_reflections_fragment",
419 profile: "ps_6_5",
420 label: "rt_reflections.slang",
421 defines: &[("DXIL_ABI", "1"), ("MAX_PROBES", "8")],
422};
423pub static RT_REFLECTIONS_FRAG_TEXTURED: SlangProgram = SlangProgram {
425 file: "rt_reflections.slang",
426 entry: "rt_reflections_fragment",
427 profile: "ps_6_5",
428 label: "rt_reflections_textured.slang",
429 defines: &[("DXIL_ABI", "1"), ("RT_TEXTURED", "1"), ("MAX_PROBES", "8")],
430};
431
432pub static GLASS_VERT: SlangProgram = SlangProgram {
437 file: "glass.slang",
438 entry: "glass_vertex",
439 profile: "vs_6_0",
440 label: "glass_vert.slang",
441 defines: &[("DXIL_ABI", "1"), ("MAX_PROBES", "8")],
442};
443pub static GLASS_FRAG: SlangProgram = SlangProgram {
445 file: "glass.slang",
446 entry: "glass_fragment",
447 profile: "ps_6_0",
448 label: "glass_frag.slang",
449 defines: &[("DXIL_ABI", "1"), ("MAX_PROBES", "8"), ("USE_MSAA", "0")],
450};
451pub static GLASS_FRAG_MSAA: SlangProgram = SlangProgram {
453 file: "glass.slang",
454 entry: "glass_fragment",
455 profile: "ps_6_0",
456 label: "glass_frag_msaa.slang",
457 defines: &[("DXIL_ABI", "1"), ("MAX_PROBES", "8"), ("USE_MSAA", "1")],
458};
459pub static GLASS_RT_FRAG: SlangProgram = SlangProgram {
461 file: "glass.slang",
462 entry: "glass_rt_fragment",
463 profile: "ps_6_5",
464 label: "glass_frag_rt.slang",
465 defines: &[
466 ("DXIL_ABI", "1"),
467 ("GLASS_RT", "1"),
468 ("MAX_PROBES", "8"),
469 ("USE_MSAA", "0"),
470 ],
471};
472pub static GLASS_RT_FRAG_MSAA: SlangProgram = SlangProgram {
474 file: "glass.slang",
475 entry: "glass_rt_fragment",
476 profile: "ps_6_5",
477 label: "glass_frag_rt_msaa.slang",
478 defines: &[
479 ("DXIL_ABI", "1"),
480 ("GLASS_RT", "1"),
481 ("MAX_PROBES", "8"),
482 ("USE_MSAA", "1"),
483 ],
484};
485pub static GLASS_RT_FRAG_TEXTURED: SlangProgram = SlangProgram {
487 file: "glass.slang",
488 entry: "glass_rt_fragment",
489 profile: "ps_6_5",
490 label: "glass_frag_rt_textured.slang",
491 defines: &[
492 ("DXIL_ABI", "1"),
493 ("GLASS_RT", "1"),
494 ("RT_TEXTURED", "1"),
495 ("MAX_PROBES", "8"),
496 ("USE_MSAA", "0"),
497 ],
498};
499pub static GLASS_RT_FRAG_TEXTURED_MSAA: SlangProgram = SlangProgram {
501 file: "glass.slang",
502 entry: "glass_rt_fragment",
503 profile: "ps_6_5",
504 label: "glass_frag_rt_textured_msaa.slang",
505 defines: &[
506 ("DXIL_ABI", "1"),
507 ("GLASS_RT", "1"),
508 ("RT_TEXTURED", "1"),
509 ("MAX_PROBES", "8"),
510 ("USE_MSAA", "1"),
511 ],
512};
513
514const GLASS_MESH_DEFINES: &[(&str, &str)] =
515 &[("DXIL_ABI", "1"), ("MAX_PROBES", "8"), ("USE_MSAA", "0")];
516const GLASS_MESH_MSAA_DEFINES: &[(&str, &str)] =
517 &[("DXIL_ABI", "1"), ("MAX_PROBES", "8"), ("USE_MSAA", "1")];
518const GLASS_MESH_TEXTURED_DEFINES: &[(&str, &str)] = &[
519 ("DXIL_ABI", "1"),
520 ("RT_TEXTURED", "1"),
521 ("MAX_PROBES", "8"),
522 ("USE_MSAA", "0"),
523];
524const GLASS_MESH_TEXTURED_MSAA_DEFINES: &[(&str, &str)] = &[
525 ("DXIL_ABI", "1"),
526 ("RT_TEXTURED", "1"),
527 ("MAX_PROBES", "8"),
528 ("USE_MSAA", "1"),
529];
530
531pub static GLASS_MESH_VERT: SlangProgram = SlangProgram {
539 file: "glass_mesh.slang",
540 entry: "glass_mesh_vertex",
541 profile: "vs_6_0",
542 label: "glass_mesh_vert.slang",
543 defines: GLASS_MESH_DEFINES,
544};
545
546pub static GLASS_MESH_RT_FRAG: SlangProgram = SlangProgram {
548 file: "glass_mesh.slang",
549 entry: "glass_mesh_rt_fragment",
550 profile: "ps_6_5",
551 label: "glass_mesh_frag_rt.slang",
552 defines: GLASS_MESH_DEFINES,
553};
554
555pub static GLASS_MESH_RT_FRAG_MSAA: SlangProgram = SlangProgram {
557 file: "glass_mesh.slang",
558 entry: "glass_mesh_rt_fragment",
559 profile: "ps_6_5",
560 label: "glass_mesh_frag_rt_msaa.slang",
561 defines: GLASS_MESH_MSAA_DEFINES,
562};
563
564pub static GLASS_MESH_RT_FRAG_TEXTURED: SlangProgram = SlangProgram {
566 file: "glass_mesh.slang",
567 entry: "glass_mesh_rt_fragment",
568 profile: "ps_6_5",
569 label: "glass_mesh_frag_rt_textured.slang",
570 defines: GLASS_MESH_TEXTURED_DEFINES,
571};
572
573pub static GLASS_MESH_RT_FRAG_TEXTURED_MSAA: SlangProgram = SlangProgram {
575 file: "glass_mesh.slang",
576 entry: "glass_mesh_rt_fragment",
577 profile: "ps_6_5",
578 label: "glass_mesh_frag_rt_textured_msaa.slang",
579 defines: GLASS_MESH_TEXTURED_MSAA_DEFINES,
580};
581
582pub static WATER_VERT: SlangProgram = SlangProgram {
589 file: "water.slang",
590 entry: "water_vertex",
591 profile: "vs_6_0",
592 label: "water_vert.slang",
593 defines: &[("DXIL_ABI", "1"), ("MAX_PROBES", "8")],
594};
595pub static WATER_FRAG: SlangProgram = SlangProgram {
597 file: "water.slang",
598 entry: "water_fragment",
599 profile: "ps_6_0",
600 label: "water_frag.slang",
601 defines: &[("DXIL_ABI", "1"), ("MAX_PROBES", "8"), ("USE_MSAA", "0")],
602};
603pub static WATER_FRAG_MSAA: SlangProgram = SlangProgram {
605 file: "water.slang",
606 entry: "water_fragment",
607 profile: "ps_6_0",
608 label: "water_frag_msaa.slang",
609 defines: &[("DXIL_ABI", "1"), ("MAX_PROBES", "8"), ("USE_MSAA", "1")],
610};
611pub static WATER_RT_FRAG: SlangProgram = SlangProgram {
613 file: "water.slang",
614 entry: "water_rt_fragment",
615 profile: "ps_6_5",
616 label: "water_frag_rt.slang",
617 defines: &[
618 ("DXIL_ABI", "1"),
619 ("WATER_RT", "1"),
620 ("MAX_PROBES", "8"),
621 ("USE_MSAA", "0"),
622 ],
623};
624pub static WATER_RT_FRAG_MSAA: SlangProgram = SlangProgram {
626 file: "water.slang",
627 entry: "water_rt_fragment",
628 profile: "ps_6_5",
629 label: "water_frag_rt_msaa.slang",
630 defines: &[
631 ("DXIL_ABI", "1"),
632 ("WATER_RT", "1"),
633 ("MAX_PROBES", "8"),
634 ("USE_MSAA", "1"),
635 ],
636};
637pub static WATER_RT_FRAG_TEXTURED: SlangProgram = SlangProgram {
639 file: "water.slang",
640 entry: "water_rt_fragment",
641 profile: "ps_6_5",
642 label: "water_frag_rt_textured.slang",
643 defines: &[
644 ("DXIL_ABI", "1"),
645 ("WATER_RT", "1"),
646 ("RT_TEXTURED", "1"),
647 ("MAX_PROBES", "8"),
648 ("USE_MSAA", "0"),
649 ],
650};
651pub static WATER_RT_FRAG_TEXTURED_MSAA: SlangProgram = SlangProgram {
653 file: "water.slang",
654 entry: "water_rt_fragment",
655 profile: "ps_6_5",
656 label: "water_frag_rt_textured_msaa.slang",
657 defines: &[
658 ("DXIL_ABI", "1"),
659 ("WATER_RT", "1"),
660 ("RT_TEXTURED", "1"),
661 ("MAX_PROBES", "8"),
662 ("USE_MSAA", "1"),
663 ],
664};
665
666const PARTICLE_ABI: &[(&str, &str)] = &[("DXIL_ABI", "1")];
683
684pub static PARTICLE_VERT: SlangProgram = SlangProgram {
686 file: "particle.slang",
687 entry: "particle_vertex",
688 profile: "vs_6_0",
689 label: "particle_vert.slang",
690 defines: PARTICLE_ABI,
691};
692pub static PARTICLE_FRAG: SlangProgram = SlangProgram {
694 file: "particle.slang",
695 entry: "particle_fragment",
696 profile: "ps_6_0",
697 label: "particle_frag.slang",
698 defines: PARTICLE_ABI,
699};
700pub static DECAL_VERT: SlangProgram = SlangProgram {
702 file: "decal.slang",
703 entry: "decal_vertex",
704 profile: "vs_6_0",
705 label: "decal_vert.slang",
706 defines: &[],
707};
708pub static DECAL_FRAG: SlangProgram = SlangProgram {
710 file: "decal.slang",
711 entry: "decal_fragment",
712 profile: "ps_6_0",
713 label: "decal_frag.slang",
714 defines: &[("USE_MSAA", "0")],
715};
716pub static DECAL_FRAG_MSAA: SlangProgram = SlangProgram {
718 file: "decal.slang",
719 entry: "decal_fragment",
720 profile: "ps_6_0",
721 label: "decal_frag_msaa.slang",
722 defines: &[("USE_MSAA", "1")],
723};
724pub static LINE_VERT: SlangProgram = SlangProgram {
726 file: "line.slang",
727 entry: "line_vertex",
728 profile: "vs_6_0",
729 label: "line_vert.slang",
730 defines: &[],
731};
732pub static LINE_FRAG: SlangProgram = SlangProgram {
734 file: "line.slang",
735 entry: "line_fragment",
736 profile: "ps_6_0",
737 label: "line_frag.slang",
738 defines: &[("USE_MSAA", "0")],
739};
740pub static LINE_FRAG_MSAA: SlangProgram = SlangProgram {
742 file: "line.slang",
743 entry: "line_fragment",
744 profile: "ps_6_0",
745 label: "line_frag_msaa.slang",
746 defines: &[("USE_MSAA", "1")],
747};
748pub static TEXT_VERT: SlangProgram = SlangProgram {
750 file: "text.slang",
751 entry: "text_vertex_main",
752 profile: "vs_6_0",
753 label: "text_vert.slang",
754 defines: &[],
755};
756pub static TEXT_FRAG: SlangProgram = SlangProgram {
758 file: "text.slang",
759 entry: "text_fragment_main",
760 profile: "ps_6_0",
761 label: "text_frag.slang",
762 defines: &[],
763};
764
765pub static ALL: &[&SlangProgram] = &[
772 &MAIN_BINDLESS_VERT,
773 &MAIN_BINDLESS_FRAG,
774 &LIGHT_CULL,
775 &RT_SKIN,
776 &HIZ_INIT_SINGLE,
777 &HIZ_INIT_MSAA,
778 &HIZ_DOWNSAMPLE,
779 &GBUFFER_PREPASS_VERT,
780 &GBUFFER_PREPASS_VERT_INSTANCED,
781 &GBUFFER_PREPASS_VERT_SKINNED,
782 &GBUFFER_BINDLESS_VERT,
783 &GBUFFER_PREPASS_FRAG,
784 &GBUFFER_BINDLESS_FRAG,
785 &SHADOW_VERT,
786 &SKINNED_SHADOW_VERT,
787 &SHADOW_BINDLESS_VERT,
788 &FOG_FROXEL,
789 &FOG_FRAG,
790 &FOG_FRAG_MSAA,
791 &AUTO_EXPOSURE_BUILD,
792 &AUTO_EXPOSURE_AVERAGE,
793 &PARTICLE_SIMULATE,
794 &FULLSCREEN_VERT,
795 &TAA_FRAG,
796 &BLOOM_PREFILTER,
797 &BLOOM_DOWNSAMPLE,
798 &BLOOM_UPSAMPLE,
799 &COMPOSITE_FRAG,
800 &SSAO_KERNEL,
801 &SSAO_BLUR,
802 &SSR_RESOLVE,
803 &SSGI_GATHER,
804 &SSGI_COMPOSITE,
805 &REFLECTION_BLUR,
806 &REFLECTION_COMPOSITE,
807 &RT_REFLECTIONS_FRAG,
808 &RT_REFLECTIONS_FRAG_TEXTURED,
809 &GLASS_VERT,
810 &GLASS_FRAG,
811 &GLASS_FRAG_MSAA,
812 &GLASS_RT_FRAG,
813 &GLASS_RT_FRAG_MSAA,
814 &GLASS_RT_FRAG_TEXTURED,
815 &GLASS_RT_FRAG_TEXTURED_MSAA,
816 &GLASS_MESH_VERT,
817 &GLASS_MESH_RT_FRAG,
818 &GLASS_MESH_RT_FRAG_MSAA,
819 &GLASS_MESH_RT_FRAG_TEXTURED,
820 &GLASS_MESH_RT_FRAG_TEXTURED_MSAA,
821 &WATER_VERT,
822 &WATER_FRAG,
823 &WATER_FRAG_MSAA,
824 &WATER_RT_FRAG,
825 &WATER_RT_FRAG_MSAA,
826 &WATER_RT_FRAG_TEXTURED,
827 &WATER_RT_FRAG_TEXTURED_MSAA,
828 &PARTICLE_VERT,
829 &PARTICLE_FRAG,
830 &DECAL_VERT,
831 &DECAL_FRAG,
832 &DECAL_FRAG_MSAA,
833 &LINE_VERT,
834 &LINE_FRAG,
835 &LINE_FRAG_MSAA,
836 &TEXT_VERT,
837 &TEXT_FRAG,
838];
839
840#[cfg(test)]
841mod tests {
842 use super::*;
843 use alloc::vec::Vec;
844
845 #[test]
852 fn every_program_has_a_distinct_label() {
853 let mut labels: Vec<&str> = ALL.iter().map(|p| p.label).collect();
854 let declared = labels.len();
855 labels.sort_unstable();
856 labels.dedup();
857 assert_eq!(
858 labels.len(),
859 declared,
860 "two programs share a label, so they would share a precompiled artifact"
861 );
862 }
863
864 #[test]
867 fn every_program_names_an_embedded_shader() {
868 for p in ALL {
869 assert!(
870 crate::shaders::embedded(p.file).is_some(),
871 "{}: no embedded {}",
872 p.label,
873 p.file
874 );
875 }
876 }
877
878 #[test]
881 fn the_table_carries_every_declared_program() {
882 for p in ALL {
883 assert!(!p.entry.is_empty() && !p.profile.is_empty(), "{}", p.label);
884 }
885 assert!(
886 ALL.len() >= 60,
887 "the DirectX program set shrank unexpectedly"
888 );
889 }
890}