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};
90const CULL_DEFINES: &[(&str, &str)] = &[("DXIL_ABI", "1")];
94
95pub static CULL: SlangProgram = SlangProgram {
97 file: "cull.slang",
98 entry: "cull_kernel",
99 profile: "cs_6_0",
100 label: "cull.slang",
101 defines: CULL_DEFINES,
102};
103pub static CULL_PHASE2: SlangProgram = SlangProgram {
106 file: "cull.slang",
107 entry: "cull_kernel",
108 profile: "cs_6_0",
109 label: "cull_phase2.slang",
110 defines: &[("DXIL_ABI", "1"), ("CULL_PHASE2", "1")],
111};
112pub static CULL_SHADOW: SlangProgram = SlangProgram {
114 file: "cull.slang",
115 entry: "cull_kernel",
116 profile: "cs_6_0",
117 label: "cull_shadow.slang",
118 defines: &[("DXIL_ABI", "1"), ("SHADOW_CULL", "1")],
119};
120pub static LIGHT_CULL: SlangProgram = SlangProgram {
122 file: "light_cull.slang",
123 entry: "light_cull_kernel",
124 profile: "cs_6_0",
125 label: "light_cull.slang",
126 defines: &[],
127};
128pub static HIZ_INIT_SINGLE: SlangProgram = SlangProgram {
130 file: "hiz_build.slang",
131 entry: "hiz_init_single",
132 profile: "cs_6_0",
133 label: "hiz_init_single.slang",
134 defines: &[("HIZ_INIT_SINGLE", "1")],
135};
136pub static HIZ_INIT_MSAA: SlangProgram = SlangProgram {
138 file: "hiz_build.slang",
139 entry: "hiz_init_msaa",
140 profile: "cs_6_0",
141 label: "hiz_init_msaa.slang",
142 defines: &[("HIZ_INIT_MSAA", "1")],
143};
144pub static HIZ_DOWNSAMPLE: SlangProgram = SlangProgram {
146 file: "hiz_build.slang",
147 entry: "hiz_downsample",
148 profile: "cs_6_0",
149 label: "hiz_downsample.slang",
150 defines: &[("HIZ_DOWNSAMPLE", "1")],
151};
152
153pub static PROBE_MIP0: SlangProgram = SlangProgram {
155 file: "probe_prefilter.slang",
156 entry: "probe_mip0",
157 profile: "cs_6_0",
158 label: "probe_mip0.slang",
159 defines: &[("PROBE_MIP0", "1")],
160};
161pub static PROBE_DOWNSAMPLE: SlangProgram = SlangProgram {
163 file: "probe_prefilter.slang",
164 entry: "probe_downsample",
165 profile: "cs_6_0",
166 label: "probe_downsample.slang",
167 defines: &[("PROBE_DOWNSAMPLE", "1")],
168};
169pub static PROBE_GGX: SlangProgram = SlangProgram {
171 file: "probe_prefilter.slang",
172 entry: "probe_ggx",
173 profile: "cs_6_0",
174 label: "probe_ggx.slang",
175 defines: &[("PROBE_GGX", "1")],
176};
177
178const GB_BINDLESS: &[(&str, &str)] = &[("GB_BINDLESS", "1"), ("DXIL_ABI", "1")];
183const GB_FRAGMENT_BINDLESS: &[(&str, &str)] = &[("GB_FRAGMENT_BINDLESS", "1"), ("DXIL_ABI", "1")];
184const SHADOW_STATIC: &[(&str, &str)] = &[("SHADOW_STATIC", "1"), ("DXIL_ABI", "1")];
185const SHADOW_SKINNED: &[(&str, &str)] = &[("SHADOW_SKINNED", "1"), ("DXIL_ABI", "1")];
186const SHADOW_BINDLESS: &[(&str, &str)] = &[("SHADOW_BINDLESS", "1"), ("DXIL_ABI", "1")];
187
188pub static GBUFFER_BINDLESS_VERT: SlangProgram = SlangProgram {
190 file: "gbuffer_prepass.slang",
191 entry: "gbuffer_prepass_vertex_bindless",
192 profile: "vs_6_0",
193 label: "gbuffer_prepass_vert_bindless.slang",
194 defines: GB_BINDLESS,
195};
196pub static GBUFFER_BINDLESS_FRAG: SlangProgram = SlangProgram {
198 file: "gbuffer_prepass.slang",
199 entry: "gbuffer_prepass_fragment_bindless",
200 profile: "ps_6_0",
201 label: "gbuffer_prepass_frag_bindless.slang",
202 defines: GB_FRAGMENT_BINDLESS,
203};
204pub static SHADOW_VERT: SlangProgram = SlangProgram {
206 file: "shadow.slang",
207 entry: "shadow_vertex_main",
208 profile: "vs_6_0",
209 label: "shadow_vert.slang",
210 defines: SHADOW_STATIC,
211};
212pub static SKINNED_SHADOW_VERT: SlangProgram = SlangProgram {
214 file: "shadow.slang",
215 entry: "shadow_vertex_main_skinned",
216 profile: "vs_6_0",
217 label: "shadow_vert_skinned.slang",
218 defines: SHADOW_SKINNED,
219};
220pub static SHADOW_BINDLESS_VERT: SlangProgram = SlangProgram {
222 file: "shadow.slang",
223 entry: "shadow_vertex_bindless",
224 profile: "vs_6_0",
225 label: "shadow_vert_bindless.slang",
226 defines: SHADOW_BINDLESS,
227};
228
229const FOG_FROXEL_DEFINES: &[(&str, &str)] = &[("FOG_FROXEL", "1"), ("DXIL_SPLIT", "1")];
244
245pub static FOG_FROXEL: SlangProgram = SlangProgram {
247 file: "fog.slang",
248 entry: "fog_froxel_kernel",
249 profile: "cs_6_0",
250 label: "fog_froxel.slang",
251 defines: FOG_FROXEL_DEFINES,
252};
253
254pub static FOG_FRAG: SlangProgram = SlangProgram {
260 file: "fog.slang",
261 entry: "fog_fragment",
262 profile: "ps_6_0",
263 label: "fog_frag.slang",
264 defines: &[("USE_MSAA", "0"), ("DXIL_STAGE_PACKING", "1")],
265};
266pub static FOG_FRAG_MSAA: SlangProgram = SlangProgram {
268 file: "fog.slang",
269 entry: "fog_fragment",
270 profile: "ps_6_0",
271 label: "fog_frag_msaa.slang",
272 defines: &[("USE_MSAA", "1"), ("DXIL_STAGE_PACKING", "1")],
273};
274
275pub static AUTO_EXPOSURE_BUILD: SlangProgram = SlangProgram {
277 file: "auto_exposure.slang",
278 entry: "histogram_build",
279 profile: "cs_6_0",
280 label: "auto_exposure_build.slang",
281 defines: &[("AE_BUILD", "1")],
282};
283pub static AUTO_EXPOSURE_AVERAGE: SlangProgram = SlangProgram {
285 file: "auto_exposure.slang",
286 entry: "histogram_average",
287 profile: "cs_6_0",
288 label: "auto_exposure_average.slang",
289 defines: &[("AE_AVERAGE", "1")],
290};
291
292pub static RT_SKIN: SlangProgram = SlangProgram {
296 file: "rt_skin.slang",
297 entry: "rt_skin",
298 profile: "cs_6_5",
299 label: "rt_skin.slang",
300 defines: &[],
301};
302
303pub static PARTICLE_SIMULATE: SlangProgram = SlangProgram {
305 file: "particle_simulate.slang",
306 entry: "particle_simulate",
307 profile: "cs_6_0",
308 label: "particle_simulate.slang",
309 defines: &[],
310};
311
312pub static FULLSCREEN_VERT: SlangProgram = SlangProgram {
316 file: "fullscreen.slang",
317 entry: "fullscreen_vertex",
318 profile: "vs_6_0",
319 label: "fullscreen_vert.slang",
320 defines: &[],
321};
322pub static TAA_FRAG: SlangProgram = SlangProgram {
324 file: "taa.slang",
325 entry: "taa_fragment_main",
326 profile: "ps_6_0",
327 label: "taa_frag.slang",
328 defines: &[],
329};
330pub static BLOOM_PREFILTER: SlangProgram = SlangProgram {
332 file: "bloom.slang",
333 entry: "bloom_prefilter_fragment",
334 profile: "ps_6_0",
335 label: "bloom_prefilter.slang",
336 defines: &[("BLOOM_PREFILTER", "1")],
337};
338pub static BLOOM_DOWNSAMPLE: SlangProgram = SlangProgram {
340 file: "bloom.slang",
341 entry: "bloom_downsample_fragment",
342 profile: "ps_6_0",
343 label: "bloom_downsample.slang",
344 defines: &[("BLOOM_DOWNSAMPLE", "1")],
345};
346pub static BLOOM_UPSAMPLE: SlangProgram = SlangProgram {
348 file: "bloom.slang",
349 entry: "bloom_upsample_fragment",
350 profile: "ps_6_0",
351 label: "bloom_upsample.slang",
352 defines: &[("BLOOM_UPSAMPLE", "1")],
353};
354pub static COMPOSITE_FRAG: SlangProgram = SlangProgram {
356 file: "composite.slang",
357 entry: "composite_fragment",
358 profile: "ps_6_0",
359 label: "composite_frag.slang",
360 defines: &[],
361};
362pub static SSAO_KERNEL: SlangProgram = SlangProgram {
364 file: "ssao.slang",
365 entry: "ssao_kernel_fragment",
366 profile: "ps_6_0",
367 label: "ssao_kernel.slang",
368 defines: &[("SSAO_KERNEL", "1")],
369};
370pub static SSAO_BLUR: SlangProgram = SlangProgram {
372 file: "ssao.slang",
373 entry: "ssao_blur_fragment",
374 profile: "ps_6_0",
375 label: "ssao_blur.slang",
376 defines: &[("SSAO_BLUR", "1")],
377};
378pub static SSR_RESOLVE: SlangProgram = SlangProgram {
380 file: "ssr.slang",
381 entry: "ssr_resolve_fragment",
382 profile: "ps_6_0",
383 label: "ssr_resolve.slang",
384 defines: SSR_DEFINES,
385};
386pub static SSGI_GATHER: SlangProgram = SlangProgram {
388 file: "ssgi.slang",
389 entry: "ssgi_gather_fragment",
390 profile: "ps_6_0",
391 label: "ssgi_gather.slang",
392 defines: &[("SSGI_GATHER", "1")],
393};
394pub static SSGI_COMPOSITE: SlangProgram = SlangProgram {
396 file: "ssgi.slang",
397 entry: "ssgi_composite_fragment",
398 profile: "ps_6_0",
399 label: "ssgi_composite.slang",
400 defines: &[("SSGI_COMPOSITE", "1")],
401};
402pub static REFLECTION_BLUR: SlangProgram = SlangProgram {
404 file: "reflection.slang",
405 entry: "reflection_blur_fragment",
406 profile: "ps_6_0",
407 label: "reflection_blur.slang",
408 defines: &[("REFLECTION_BLUR", "1")],
409};
410pub static REFLECTION_COMPOSITE: SlangProgram = SlangProgram {
412 file: "reflection.slang",
413 entry: "reflection_composite_fragment",
414 profile: "ps_6_0",
415 label: "reflection_composite.slang",
416 defines: &[("REFLECTION_COMPOSITE", "1")],
417};
418
419pub static RT_REFLECTIONS_FRAG: SlangProgram = SlangProgram {
436 file: "rt_reflections.slang",
437 entry: "rt_reflections_fragment",
438 profile: "ps_6_5",
439 label: "rt_reflections.slang",
440 defines: &[("DXIL_ABI", "1"), ("MAX_PROBES", "8")],
441};
442pub static RT_REFLECTIONS_FRAG_TEXTURED: SlangProgram = SlangProgram {
444 file: "rt_reflections.slang",
445 entry: "rt_reflections_fragment",
446 profile: "ps_6_5",
447 label: "rt_reflections_textured.slang",
448 defines: &[("DXIL_ABI", "1"), ("RT_TEXTURED", "1"), ("MAX_PROBES", "8")],
449};
450
451pub static GLASS_VERT: SlangProgram = SlangProgram {
456 file: "glass.slang",
457 entry: "glass_vertex",
458 profile: "vs_6_0",
459 label: "glass_vert.slang",
460 defines: &[("DXIL_ABI", "1"), ("MAX_PROBES", "8")],
461};
462pub static GLASS_FRAG: SlangProgram = SlangProgram {
464 file: "glass.slang",
465 entry: "glass_fragment",
466 profile: "ps_6_0",
467 label: "glass_frag.slang",
468 defines: &[("DXIL_ABI", "1"), ("MAX_PROBES", "8"), ("USE_MSAA", "0")],
469};
470pub static GLASS_FRAG_MSAA: SlangProgram = SlangProgram {
472 file: "glass.slang",
473 entry: "glass_fragment",
474 profile: "ps_6_0",
475 label: "glass_frag_msaa.slang",
476 defines: &[("DXIL_ABI", "1"), ("MAX_PROBES", "8"), ("USE_MSAA", "1")],
477};
478pub static GLASS_RT_FRAG: SlangProgram = SlangProgram {
480 file: "glass.slang",
481 entry: "glass_rt_fragment",
482 profile: "ps_6_5",
483 label: "glass_frag_rt.slang",
484 defines: &[
485 ("DXIL_ABI", "1"),
486 ("GLASS_RT", "1"),
487 ("MAX_PROBES", "8"),
488 ("USE_MSAA", "0"),
489 ],
490};
491pub static GLASS_RT_FRAG_MSAA: SlangProgram = SlangProgram {
493 file: "glass.slang",
494 entry: "glass_rt_fragment",
495 profile: "ps_6_5",
496 label: "glass_frag_rt_msaa.slang",
497 defines: &[
498 ("DXIL_ABI", "1"),
499 ("GLASS_RT", "1"),
500 ("MAX_PROBES", "8"),
501 ("USE_MSAA", "1"),
502 ],
503};
504pub static GLASS_RT_FRAG_TEXTURED: SlangProgram = SlangProgram {
506 file: "glass.slang",
507 entry: "glass_rt_fragment",
508 profile: "ps_6_5",
509 label: "glass_frag_rt_textured.slang",
510 defines: &[
511 ("DXIL_ABI", "1"),
512 ("GLASS_RT", "1"),
513 ("RT_TEXTURED", "1"),
514 ("MAX_PROBES", "8"),
515 ("USE_MSAA", "0"),
516 ],
517};
518pub static GLASS_RT_FRAG_TEXTURED_MSAA: SlangProgram = SlangProgram {
520 file: "glass.slang",
521 entry: "glass_rt_fragment",
522 profile: "ps_6_5",
523 label: "glass_frag_rt_textured_msaa.slang",
524 defines: &[
525 ("DXIL_ABI", "1"),
526 ("GLASS_RT", "1"),
527 ("RT_TEXTURED", "1"),
528 ("MAX_PROBES", "8"),
529 ("USE_MSAA", "1"),
530 ],
531};
532
533const GLASS_MESH_DEFINES: &[(&str, &str)] =
534 &[("DXIL_ABI", "1"), ("MAX_PROBES", "8"), ("USE_MSAA", "0")];
535const GLASS_MESH_MSAA_DEFINES: &[(&str, &str)] =
536 &[("DXIL_ABI", "1"), ("MAX_PROBES", "8"), ("USE_MSAA", "1")];
537const GLASS_MESH_TEXTURED_DEFINES: &[(&str, &str)] = &[
538 ("DXIL_ABI", "1"),
539 ("RT_TEXTURED", "1"),
540 ("MAX_PROBES", "8"),
541 ("USE_MSAA", "0"),
542];
543const GLASS_MESH_TEXTURED_MSAA_DEFINES: &[(&str, &str)] = &[
544 ("DXIL_ABI", "1"),
545 ("RT_TEXTURED", "1"),
546 ("MAX_PROBES", "8"),
547 ("USE_MSAA", "1"),
548];
549
550pub static GLASS_MESH_VERT: SlangProgram = SlangProgram {
558 file: "glass_mesh.slang",
559 entry: "glass_mesh_vertex",
560 profile: "vs_6_0",
561 label: "glass_mesh_vert.slang",
562 defines: GLASS_MESH_DEFINES,
563};
564
565pub static GLASS_MESH_RT_FRAG: SlangProgram = SlangProgram {
567 file: "glass_mesh.slang",
568 entry: "glass_mesh_rt_fragment",
569 profile: "ps_6_5",
570 label: "glass_mesh_frag_rt.slang",
571 defines: GLASS_MESH_DEFINES,
572};
573
574pub static GLASS_MESH_RT_FRAG_MSAA: SlangProgram = SlangProgram {
576 file: "glass_mesh.slang",
577 entry: "glass_mesh_rt_fragment",
578 profile: "ps_6_5",
579 label: "glass_mesh_frag_rt_msaa.slang",
580 defines: GLASS_MESH_MSAA_DEFINES,
581};
582
583pub static GLASS_MESH_RT_FRAG_TEXTURED: SlangProgram = SlangProgram {
585 file: "glass_mesh.slang",
586 entry: "glass_mesh_rt_fragment",
587 profile: "ps_6_5",
588 label: "glass_mesh_frag_rt_textured.slang",
589 defines: GLASS_MESH_TEXTURED_DEFINES,
590};
591
592pub static GLASS_MESH_RT_FRAG_TEXTURED_MSAA: SlangProgram = SlangProgram {
594 file: "glass_mesh.slang",
595 entry: "glass_mesh_rt_fragment",
596 profile: "ps_6_5",
597 label: "glass_mesh_frag_rt_textured_msaa.slang",
598 defines: GLASS_MESH_TEXTURED_MSAA_DEFINES,
599};
600
601pub static WATER_VERT: SlangProgram = SlangProgram {
608 file: "water.slang",
609 entry: "water_vertex",
610 profile: "vs_6_0",
611 label: "water_vert.slang",
612 defines: &[("DXIL_ABI", "1"), ("MAX_PROBES", "8")],
613};
614pub static WATER_FRAG: SlangProgram = SlangProgram {
616 file: "water.slang",
617 entry: "water_fragment",
618 profile: "ps_6_0",
619 label: "water_frag.slang",
620 defines: &[("DXIL_ABI", "1"), ("MAX_PROBES", "8"), ("USE_MSAA", "0")],
621};
622pub static WATER_FRAG_MSAA: SlangProgram = SlangProgram {
624 file: "water.slang",
625 entry: "water_fragment",
626 profile: "ps_6_0",
627 label: "water_frag_msaa.slang",
628 defines: &[("DXIL_ABI", "1"), ("MAX_PROBES", "8"), ("USE_MSAA", "1")],
629};
630pub static WATER_RT_FRAG: SlangProgram = SlangProgram {
632 file: "water.slang",
633 entry: "water_rt_fragment",
634 profile: "ps_6_5",
635 label: "water_frag_rt.slang",
636 defines: &[
637 ("DXIL_ABI", "1"),
638 ("WATER_RT", "1"),
639 ("MAX_PROBES", "8"),
640 ("USE_MSAA", "0"),
641 ],
642};
643pub static WATER_RT_FRAG_MSAA: SlangProgram = SlangProgram {
645 file: "water.slang",
646 entry: "water_rt_fragment",
647 profile: "ps_6_5",
648 label: "water_frag_rt_msaa.slang",
649 defines: &[
650 ("DXIL_ABI", "1"),
651 ("WATER_RT", "1"),
652 ("MAX_PROBES", "8"),
653 ("USE_MSAA", "1"),
654 ],
655};
656pub static WATER_RT_FRAG_TEXTURED: SlangProgram = SlangProgram {
658 file: "water.slang",
659 entry: "water_rt_fragment",
660 profile: "ps_6_5",
661 label: "water_frag_rt_textured.slang",
662 defines: &[
663 ("DXIL_ABI", "1"),
664 ("WATER_RT", "1"),
665 ("RT_TEXTURED", "1"),
666 ("MAX_PROBES", "8"),
667 ("USE_MSAA", "0"),
668 ],
669};
670pub static WATER_RT_FRAG_TEXTURED_MSAA: SlangProgram = SlangProgram {
672 file: "water.slang",
673 entry: "water_rt_fragment",
674 profile: "ps_6_5",
675 label: "water_frag_rt_textured_msaa.slang",
676 defines: &[
677 ("DXIL_ABI", "1"),
678 ("WATER_RT", "1"),
679 ("RT_TEXTURED", "1"),
680 ("MAX_PROBES", "8"),
681 ("USE_MSAA", "1"),
682 ],
683};
684
685const PARTICLE_ABI: &[(&str, &str)] = &[("DXIL_ABI", "1")];
702
703pub static PARTICLE_VERT: SlangProgram = SlangProgram {
705 file: "particle.slang",
706 entry: "particle_vertex",
707 profile: "vs_6_0",
708 label: "particle_vert.slang",
709 defines: PARTICLE_ABI,
710};
711pub static PARTICLE_FRAG: SlangProgram = SlangProgram {
713 file: "particle.slang",
714 entry: "particle_fragment",
715 profile: "ps_6_0",
716 label: "particle_frag.slang",
717 defines: PARTICLE_ABI,
718};
719pub static DECAL_VERT: SlangProgram = SlangProgram {
721 file: "decal.slang",
722 entry: "decal_vertex",
723 profile: "vs_6_0",
724 label: "decal_vert.slang",
725 defines: &[],
726};
727pub static DECAL_FRAG: SlangProgram = SlangProgram {
729 file: "decal.slang",
730 entry: "decal_fragment",
731 profile: "ps_6_0",
732 label: "decal_frag.slang",
733 defines: &[("USE_MSAA", "0")],
734};
735pub static DECAL_FRAG_MSAA: SlangProgram = SlangProgram {
737 file: "decal.slang",
738 entry: "decal_fragment",
739 profile: "ps_6_0",
740 label: "decal_frag_msaa.slang",
741 defines: &[("USE_MSAA", "1")],
742};
743pub static LINE_VERT: SlangProgram = SlangProgram {
745 file: "line.slang",
746 entry: "line_vertex",
747 profile: "vs_6_0",
748 label: "line_vert.slang",
749 defines: &[],
750};
751pub static LINE_FRAG: SlangProgram = SlangProgram {
753 file: "line.slang",
754 entry: "line_fragment",
755 profile: "ps_6_0",
756 label: "line_frag.slang",
757 defines: &[("USE_MSAA", "0")],
758};
759pub static LINE_FRAG_MSAA: SlangProgram = SlangProgram {
761 file: "line.slang",
762 entry: "line_fragment",
763 profile: "ps_6_0",
764 label: "line_frag_msaa.slang",
765 defines: &[("USE_MSAA", "1")],
766};
767pub static TEXT_VERT: SlangProgram = SlangProgram {
769 file: "text.slang",
770 entry: "text_vertex_main",
771 profile: "vs_6_0",
772 label: "text_vert.slang",
773 defines: &[],
774};
775pub static TEXT_FRAG: SlangProgram = SlangProgram {
777 file: "text.slang",
778 entry: "text_fragment_main",
779 profile: "ps_6_0",
780 label: "text_frag.slang",
781 defines: &[],
782};
783
784pub static ALL: &[&SlangProgram] = &[
791 &MAIN_BINDLESS_VERT,
792 &MAIN_BINDLESS_FRAG,
793 &LIGHT_CULL,
794 &CULL,
795 &CULL_PHASE2,
796 &CULL_SHADOW,
797 &RT_SKIN,
798 &HIZ_INIT_SINGLE,
799 &HIZ_INIT_MSAA,
800 &HIZ_DOWNSAMPLE,
801 &PROBE_MIP0,
802 &PROBE_DOWNSAMPLE,
803 &PROBE_GGX,
804 &GBUFFER_BINDLESS_VERT,
805 &GBUFFER_BINDLESS_FRAG,
806 &SHADOW_VERT,
807 &SKINNED_SHADOW_VERT,
808 &SHADOW_BINDLESS_VERT,
809 &FOG_FROXEL,
810 &FOG_FRAG,
811 &FOG_FRAG_MSAA,
812 &AUTO_EXPOSURE_BUILD,
813 &AUTO_EXPOSURE_AVERAGE,
814 &PARTICLE_SIMULATE,
815 &FULLSCREEN_VERT,
816 &TAA_FRAG,
817 &BLOOM_PREFILTER,
818 &BLOOM_DOWNSAMPLE,
819 &BLOOM_UPSAMPLE,
820 &COMPOSITE_FRAG,
821 &SSAO_KERNEL,
822 &SSAO_BLUR,
823 &SSR_RESOLVE,
824 &SSGI_GATHER,
825 &SSGI_COMPOSITE,
826 &REFLECTION_BLUR,
827 &REFLECTION_COMPOSITE,
828 &RT_REFLECTIONS_FRAG,
829 &RT_REFLECTIONS_FRAG_TEXTURED,
830 &GLASS_VERT,
831 &GLASS_FRAG,
832 &GLASS_FRAG_MSAA,
833 &GLASS_RT_FRAG,
834 &GLASS_RT_FRAG_MSAA,
835 &GLASS_RT_FRAG_TEXTURED,
836 &GLASS_RT_FRAG_TEXTURED_MSAA,
837 &GLASS_MESH_VERT,
838 &GLASS_MESH_RT_FRAG,
839 &GLASS_MESH_RT_FRAG_MSAA,
840 &GLASS_MESH_RT_FRAG_TEXTURED,
841 &GLASS_MESH_RT_FRAG_TEXTURED_MSAA,
842 &WATER_VERT,
843 &WATER_FRAG,
844 &WATER_FRAG_MSAA,
845 &WATER_RT_FRAG,
846 &WATER_RT_FRAG_MSAA,
847 &WATER_RT_FRAG_TEXTURED,
848 &WATER_RT_FRAG_TEXTURED_MSAA,
849 &PARTICLE_VERT,
850 &PARTICLE_FRAG,
851 &DECAL_VERT,
852 &DECAL_FRAG,
853 &DECAL_FRAG_MSAA,
854 &LINE_VERT,
855 &LINE_FRAG,
856 &LINE_FRAG_MSAA,
857 &TEXT_VERT,
858 &TEXT_FRAG,
859];
860
861#[cfg(test)]
862mod tests {
863 use super::*;
864 use alloc::vec::Vec;
865
866 #[test]
873 fn every_program_has_a_distinct_label() {
874 let mut labels: Vec<&str> = ALL.iter().map(|p| p.label).collect();
875 let declared = labels.len();
876 labels.sort_unstable();
877 labels.dedup();
878 assert_eq!(
879 labels.len(),
880 declared,
881 "two programs share a label, so they would share a precompiled artifact"
882 );
883 }
884
885 #[test]
888 fn every_program_names_an_embedded_shader() {
889 for p in ALL {
890 assert!(
891 crate::render::shaders::embedded(p.file).is_some(),
892 "{}: no embedded {}",
893 p.label,
894 p.file
895 );
896 }
897 }
898
899 #[test]
902 fn the_table_carries_every_declared_program() {
903 for p in ALL {
904 assert!(!p.entry.is_empty() && !p.profile.is_empty(), "{}", p.label);
905 }
906 assert!(
907 ALL.len() >= 60,
908 "the DirectX program set shrank unexpectedly"
909 );
910 }
911}