Skip to main content

concinnity_core/render/
shaders.rs

1//! The single-source `.slang` engine shaders, embedded once for every consumer.
2//!
3//! Both halves of the toolchain read these: the renderer compiles them at init
4//! (or loads a precompiled artifact keyed by their text), and the device build
5//! script compiles the same text ahead of time. They live here, below the
6//! backends, so the two can never disagree about what a program's source is --
7//! the content-addressed shader cache keys on exactly this text.
8
9/// Every embedded shader, as (file name, source). `embedded` looks up by name;
10/// a build script iterating the set walks this table.
11pub const SOURCES: &[(&str, &str)] = &[
12    ("auto_exposure.slang", AUTO_EXPOSURE),
13    ("bloom.slang", BLOOM),
14    ("composite.slang", COMPOSITE),
15    ("cull.slang", CULL),
16    ("decal.slang", DECAL),
17    ("fog.slang", FOG),
18    ("fullscreen.slang", FULLSCREEN),
19    ("gbuffer_prepass.slang", GBUFFER_PREPASS),
20    ("glass.slang", GLASS),
21    ("glass_mesh.slang", GLASS_MESH),
22    ("hiz_build.slang", HIZ_BUILD),
23    ("light_cull.slang", LIGHT_CULL),
24    ("light_types.slang", LIGHT_TYPES),
25    ("line.slang", LINE),
26    ("main_bindless.slang", MAIN_BINDLESS),
27    ("main_shading.slang", MAIN_SHADING),
28    ("main_types.slang", MAIN_TYPES),
29    ("model_history.slang", MODEL_HISTORY),
30    ("object_common.slang", OBJECT_COMMON),
31    ("particle.slang", PARTICLE),
32    ("particle_simulate.slang", PARTICLE_SIMULATE),
33    ("particle_types.slang", PARTICLE_TYPES),
34    ("post_common.slang", POST_COMMON),
35    ("probe_common.slang", PROBE_COMMON),
36    ("probe_prefilter.slang", PROBE_PREFILTER),
37    ("probe_types.slang", PROBE_TYPES),
38    ("raymarch.slang", RAYMARCH),
39    ("raymarch_common.slang", RAYMARCH_COMMON),
40    ("raymarch_types.slang", RAYMARCH_TYPES),
41    ("reflection.slang", REFLECTION),
42    ("rt_reflections.slang", RT_REFLECTIONS),
43    ("rt_skin.slang", RT_SKIN),
44    ("rt_trace.slang", RT_TRACE),
45    ("rt_types.slang", RT_TYPES),
46    ("shadow.slang", SHADOW),
47    ("shadow_bias.slang", SHADOW_BIAS),
48    ("ssao.slang", SSAO),
49    ("ssgi.slang", SSGI),
50    ("ssr.slang", SSR),
51    ("surface_fragment_default.slang", SURFACE_FRAGMENT_DEFAULT),
52    ("surface_vertex_default.slang", SURFACE_VERTEX_DEFAULT),
53    ("taa.slang", TAA),
54    ("text.slang", TEXT),
55    ("water.slang", WATER),
56];
57
58/// One shader's embedded text, by file name.
59pub fn embedded(file: &str) -> Option<&'static str> {
60    SOURCES
61        .iter()
62        .find_map(|(name, text)| (*name == file).then_some(*text))
63}
64
65/// `auto_exposure.slang`.
66pub const AUTO_EXPOSURE: &str = include_str!("shaders/auto_exposure.slang");
67/// `bloom.slang`.
68pub const BLOOM: &str = include_str!("shaders/bloom.slang");
69/// `composite.slang`.
70pub const COMPOSITE: &str = include_str!("shaders/composite.slang");
71/// `cull.slang`.
72pub const CULL: &str = include_str!("shaders/cull.slang");
73/// `decal.slang`.
74pub const DECAL: &str = include_str!("shaders/decal.slang");
75/// `fog.slang`.
76pub const FOG: &str = include_str!("shaders/fog.slang");
77/// `fullscreen.slang`.
78pub const FULLSCREEN: &str = include_str!("shaders/fullscreen.slang");
79/// `gbuffer_prepass.slang`.
80pub const GBUFFER_PREPASS: &str = include_str!("shaders/gbuffer_prepass.slang");
81/// `glass.slang`.
82pub const GLASS: &str = include_str!("shaders/glass.slang");
83/// `glass_mesh.slang`.
84pub const GLASS_MESH: &str = include_str!("shaders/glass_mesh.slang");
85/// `hiz_build.slang`.
86pub const HIZ_BUILD: &str = include_str!("shaders/hiz_build.slang");
87/// `light_cull.slang`.
88pub const LIGHT_CULL: &str = include_str!("shaders/light_cull.slang");
89/// `light_types.slang`.
90pub const LIGHT_TYPES: &str = include_str!("shaders/light_types.slang");
91/// `line.slang`.
92pub const LINE: &str = include_str!("shaders/line.slang");
93/// `main_bindless.slang`.
94pub const MAIN_BINDLESS: &str = include_str!("shaders/main_bindless.slang");
95/// `main_shading.slang`.
96pub const MAIN_SHADING: &str = include_str!("shaders/main_shading.slang");
97/// `main_types.slang`.
98pub const MAIN_TYPES: &str = include_str!("shaders/main_types.slang");
99/// `model_history.slang`.
100pub const MODEL_HISTORY: &str = include_str!("shaders/model_history.slang");
101/// `object_common.slang`.
102pub const OBJECT_COMMON: &str = include_str!("shaders/object_common.slang");
103/// `particle.slang`.
104pub const PARTICLE: &str = include_str!("shaders/particle.slang");
105/// `particle_simulate.slang`.
106pub const PARTICLE_SIMULATE: &str = include_str!("shaders/particle_simulate.slang");
107/// `particle_types.slang`.
108pub const PARTICLE_TYPES: &str = include_str!("shaders/particle_types.slang");
109/// `post_common.slang`.
110pub const POST_COMMON: &str = include_str!("shaders/post_common.slang");
111/// `probe_common.slang`.
112pub const PROBE_COMMON: &str = include_str!("shaders/probe_common.slang");
113/// `probe_prefilter.slang`.
114pub const PROBE_PREFILTER: &str = include_str!("shaders/probe_prefilter.slang");
115/// `probe_types.slang`.
116pub const PROBE_TYPES: &str = include_str!("shaders/probe_types.slang");
117/// `raymarch.slang`.
118pub const RAYMARCH: &str = include_str!("shaders/raymarch.slang");
119/// `raymarch_common.slang`.
120pub const RAYMARCH_COMMON: &str = include_str!("shaders/raymarch_common.slang");
121/// `raymarch_types.slang`.
122pub const RAYMARCH_TYPES: &str = include_str!("shaders/raymarch_types.slang");
123/// `reflection.slang`.
124pub const REFLECTION: &str = include_str!("shaders/reflection.slang");
125/// `rt_reflections.slang`.
126pub const RT_REFLECTIONS: &str = include_str!("shaders/rt_reflections.slang");
127/// `rt_skin.slang`.
128pub const RT_SKIN: &str = include_str!("shaders/rt_skin.slang");
129/// `rt_trace.slang`.
130pub const RT_TRACE: &str = include_str!("shaders/rt_trace.slang");
131/// `rt_types.slang`.
132pub const RT_TYPES: &str = include_str!("shaders/rt_types.slang");
133/// `shadow.slang`.
134pub const SHADOW: &str = include_str!("shaders/shadow.slang");
135/// `shadow_bias.slang`.
136pub const SHADOW_BIAS: &str = include_str!("shaders/shadow_bias.slang");
137/// `ssao.slang`.
138pub const SSAO: &str = include_str!("shaders/ssao.slang");
139/// `ssgi.slang`.
140pub const SSGI: &str = include_str!("shaders/ssgi.slang");
141/// `ssr.slang`.
142pub const SSR: &str = include_str!("shaders/ssr.slang");
143/// `surface_fragment_default.slang`.
144pub const SURFACE_FRAGMENT_DEFAULT: &str = include_str!("shaders/surface_fragment_default.slang");
145/// `surface_vertex_default.slang`.
146pub const SURFACE_VERTEX_DEFAULT: &str = include_str!("shaders/surface_vertex_default.slang");
147/// `taa.slang`.
148pub const TAA: &str = include_str!("shaders/taa.slang");
149/// `text.slang`.
150pub const TEXT: &str = include_str!("shaders/text.slang");
151/// `water.slang`.
152pub const WATER: &str = include_str!("shaders/water.slang");