14 .typedef_source(
"eevee_defines.hh")
15 .typedef_source(
"eevee_shader_shared.hh");
21 .define(
"EEVEE_SAMPLING_DATA")
22 .additional_info(
"eevee_shared")
26 .define(
"EEVEE_UTILITY_TX")
30 .smooth(Type::FLOAT,
"clip_distance");
33 .vertex_out(eevee_clip_plane_iface)
35 .define(
"MAT_CLIP_PLANE");
46 .smooth(Type::VEC3,
"P")
48 .smooth(Type::VEC3,
"N");
51 .additional_info(
"eevee_shared")
52 .define(
"MAT_GEOM_MESH")
53 .vertex_in(0, Type::VEC3,
"pos")
54 .vertex_in(1, Type::VEC3,
"nor")
55 .vertex_source(
"eevee_geom_mesh_vert.glsl")
56 .vertex_out(eevee_surf_iface)
57 .additional_info(
"draw_modelmat_new",
58 "draw_object_infos_new",
59 "draw_resource_id_varying",
63 .smooth(Type::FLOAT,
"radius")
64 .smooth(Type::VEC3,
"position");
66 .flat(Type::INT,
"id");
69 .additional_info(
"eevee_shared")
70 .define(
"MAT_GEOM_POINT_CLOUD")
71 .vertex_source(
"eevee_geom_point_cloud_vert.glsl")
72 .vertex_out(eevee_surf_iface)
73 .vertex_out(eevee_surf_point_cloud_iface)
74 .vertex_out(eevee_surf_point_cloud_flat_iface)
75 .additional_info(
"draw_pointcloud_new",
77 "draw_object_infos_new",
78 "draw_resource_id_varying",
82 .additional_info(
"eevee_shared")
83 .define(
"MAT_GEOM_VOLUME")
84 .vertex_in(0, Type::VEC3,
"pos")
85 .vertex_out(eevee_surf_iface)
86 .vertex_source(
"eevee_geom_volume_vert.glsl")
87 .additional_info(
"draw_modelmat_new",
88 "draw_object_infos_new",
89 "draw_resource_id_varying",
94 .additional_info(
"eevee_shared")
95 .define(
"MAT_GEOM_GPENCIL")
96 .vertex_source(
"eevee_geom_gpencil_vert.glsl")
97 .vertex_out(eevee_surf_iface)
98 .additional_info(
"draw_gpencil_new",
100 "draw_object_infos_new",
101 "draw_resource_id_varying",
102 "draw_resource_id_new");
105 .smooth(Type::VEC2,
"barycentric_coords")
106 .smooth(Type::VEC3,
"tangent")
107 .smooth(Type::VEC3,
"binormal")
108 .smooth(Type::FLOAT,
"time")
109 .smooth(Type::FLOAT,
"time_width")
110 .smooth(Type::FLOAT,
"thickness");
112 .flat(Type::INT,
"strand_id");
115 .additional_info(
"eevee_shared")
116 .define(
"MAT_GEOM_CURVES")
117 .vertex_source(
"eevee_geom_curves_vert.glsl")
118 .vertex_out(eevee_surf_iface)
119 .vertex_out(eevee_surf_curve_iface)
120 .vertex_out(eevee_surf_curve_flat_iface)
121 .additional_info(
"draw_modelmat_new",
122 "draw_object_infos_new",
123 "draw_resource_id_varying",
126 "draw_curves_infos");
129 .additional_info(
"eevee_shared")
130 .define(
"MAT_GEOM_WORLD")
131 .builtins(BuiltinBits::VERTEX_ID)
132 .vertex_source(
"eevee_geom_world_vert.glsl")
133 .vertex_out(eevee_surf_iface)
134 .additional_info(
"draw_modelmat_new",
135 "draw_object_infos_new",
136 "draw_resource_id_varying",
145#define image_out(slot, qualifier, format, name) \
146 image(slot, format, qualifier, ImageType::FLOAT_2D, name, Frequency::PASS)
147#define image_array_out(slot, qualifier, format, name) \
148 image(slot, format, qualifier, ImageType::FLOAT_2D_ARRAY, name, Frequency::PASS)
151 .define(
"MAT_RENDER_PASS_SUPPORT")
152 .additional_info(
"eevee_global_ubo")
161 .define(
"MAT_DEFERRED")
162 .define(
"GBUFFER_WRITE")
164 .early_fragment_test(
true)
166 .fragment_out(0, Type::VEC4,
"out_radiance")
168 .fragment_out(2, Type::VEC2,
"out_gbuf_normal")
169 .fragment_out(3, Type::VEC4,
"out_gbuf_closure1")
170 .fragment_out(4, Type::VEC4,
"out_gbuf_closure2")
175 .additional_info(
"eevee_global_ubo",
176 "eevee_utility_texture",
180 "eevee_sampling_data",
184 .fragment_source(
"eevee_surf_deferred_frag.glsl")
185 .additional_info(
"eevee_surf_deferred_base");
188 .fragment_source(
"eevee_surf_hybrid_frag.glsl")
189 .additional_info(
"eevee_surf_deferred_base",
191 "eevee_lightprobe_data",
192 "eevee_shadow_data");
195 .define(
"MAT_FORWARD")
198 .early_fragment_test(
true)
199 .fragment_out(0, Type::VEC4,
"out_radiance", DualBlend::SRC_0)
200 .fragment_out(0, Type::VEC4,
"out_transmittance", DualBlend::SRC_1)
201 .fragment_source(
"eevee_surf_forward_frag.glsl")
202 .additional_info(
"eevee_global_ubo",
204 "eevee_lightprobe_data",
205 "eevee_utility_texture",
206 "eevee_sampling_data",
216 .define(
"MAT_CAPTURE")
218 .storage_buf(
CAPTURE_BUF_SLOT, Qualifier::READ_WRITE,
"CaptureInfoData",
"capture_info_buf")
219 .push_constant(Type::BOOL,
"is_double_sided")
220 .fragment_source(
"eevee_surf_capture_frag.glsl")
221 .additional_info(
"eevee_global_ubo",
"eevee_utility_texture");
225 .fragment_source(
"eevee_surf_depth_frag.glsl")
226 .additional_info(
"eevee_global_ubo",
"eevee_sampling_data",
"eevee_utility_texture");
229 .push_constant(Type::FLOAT,
"world_opacity_fade")
230 .push_constant(Type::FLOAT,
"world_background_blur")
231 .push_constant(Type::IVEC4,
"world_coord_packed")
232 .early_fragment_test(
true)
233 .fragment_out(0, Type::VEC4,
"out_background")
234 .fragment_source(
"eevee_surf_world_frag.glsl")
235 .additional_info(
"eevee_global_ubo",
236 "eevee_lightprobe_sphere_data",
237 "eevee_volume_probe_data",
238 "eevee_sampling_data",
242 "eevee_utility_texture");
245 .fragment_out(0, Type::VEC4,
"out_background")
246 .fragment_source(
"eevee_renderpass_clear_frag.glsl")
247 .additional_info(
"draw_fullscreen",
249 "eevee_render_pass_out",
250 "eevee_cryptomatte_out",
252 .do_static_compilation(
true);
255 .flat(Type::INT,
"shadow_view_id");
258 .smooth(Type::VEC3,
"position")
259 .smooth(Type::VEC3,
"vector");
263 .define(
"MAT_SHADOW")
264 .builtins(BuiltinBits::VIEWPORT_INDEX)
265 .vertex_out(eevee_surf_shadow_clipping_iface)
269 "render_view_buf[SHADOW_VIEW_MAX]")
270 .fragment_source(
"eevee_surf_shadow_frag.glsl")
271 .additional_info(
"eevee_global_ubo",
"eevee_utility_texture",
"eevee_sampling_data");
274 .additional_info(
"eevee_surf_shadow")
275 .define(
"SHADOW_UPDATE_ATOMIC_RASTER")
276 .builtins(BuiltinBits::TEXTURE_ATOMIC)
277 .vertex_out(eevee_surf_shadow_atomic_iface)
281 "render_map_buf[SHADOW_RENDER_MAP_SIZE]")
284 Qualifier::READ_WRITE,
285 ImageType::UINT_2D_ARRAY_ATOMIC,
289 .additional_info(
"eevee_surf_shadow")
290 .define(
"SHADOW_UPDATE_TBDR")
291 .builtins(BuiltinBits::LAYER)
294 .depth_write(DepthWrite::GREATER)
296 .fragment_out(0, Type::FLOAT,
"out_depth", DualBlend::NONE,
SHADOW_ROG_ID);
299#undef image_array_out
308 .define(
"MAT_VOLUME")
310 .early_fragment_test(
true)
313 Qualifier::READ_WRITE,
315 "out_scattering_img")
318 Qualifier::READ_WRITE,
320 "out_extinction_img")
323 Qualifier::READ_WRITE,
328 Qualifier::READ_WRITE,
333 Qualifier::READ_WRITE,
335 "out_phase_weight_img")
339 ImageType::UINT_3D_ATOMIC,
341 .fragment_source(
"eevee_surf_volume_frag.glsl")
342 .additional_info(
"draw_modelmat_new_common",
346 "eevee_sampling_data",
347 "eevee_utility_texture");
350 .define(
"MAT_OCCUPANCY")
352 .early_fragment_test(
false)
353 .builtins(BuiltinBits::TEXTURE_ATOMIC)
354 .push_constant(Type::BOOL,
"use_fast_method")
358 Qualifier::READ_WRITE,
359 ImageType::UINT_2D_ATOMIC,
363 Qualifier::READ_WRITE,
364 ImageType::UINT_3D_ATOMIC,
366 .fragment_source(
"eevee_surf_occupancy_frag.glsl")
367 .additional_info(
"eevee_global_ubo",
"eevee_sampling_data");
381 .define(
"EEVEE_MATERIAL_STUBS")
383 .uniform_buf(0,
"int",
"node_tree");
385# define EEVEE_MAT_FINAL_VARIATION(name, ...) \
386 GPU_SHADER_CREATE_INFO(name).additional_info(__VA_ARGS__).do_static_compilation(true);
388# define EEVEE_MAT_GEOM_VARIATIONS(prefix, ...) \
389 EEVEE_MAT_FINAL_VARIATION(prefix##_world, "eevee_geom_world", __VA_ARGS__) \
392 EEVEE_MAT_FINAL_VARIATION(prefix##_curves, "eevee_geom_curves", __VA_ARGS__) \
393 EEVEE_MAT_FINAL_VARIATION(prefix##_mesh, "eevee_geom_mesh", __VA_ARGS__) \
394 EEVEE_MAT_FINAL_VARIATION(prefix##_point_cloud, "eevee_geom_point_cloud", __VA_ARGS__) \
395 EEVEE_MAT_FINAL_VARIATION(prefix##_volume, "eevee_geom_volume", __VA_ARGS__)
397# define EEVEE_MAT_PIPE_VARIATIONS(name, ...) \
398 EEVEE_MAT_GEOM_VARIATIONS(name##_world, "eevee_surf_world", __VA_ARGS__) \
399 EEVEE_MAT_GEOM_VARIATIONS(name##_depth, "eevee_surf_depth", __VA_ARGS__) \
400 EEVEE_MAT_GEOM_VARIATIONS(name##_deferred, "eevee_surf_deferred", __VA_ARGS__) \
401 EEVEE_MAT_GEOM_VARIATIONS(name##_forward, "eevee_surf_forward", __VA_ARGS__) \
402 EEVEE_MAT_GEOM_VARIATIONS(name##_capture, "eevee_surf_capture", __VA_ARGS__) \
403 EEVEE_MAT_GEOM_VARIATIONS(name##_volume, "eevee_surf_volume", __VA_ARGS__) \
404 EEVEE_MAT_GEOM_VARIATIONS(name##_occupancy, "eevee_surf_occupancy", __VA_ARGS__) \
405 EEVEE_MAT_GEOM_VARIATIONS(name##_shadow_atomic, "eevee_surf_shadow_atomic", __VA_ARGS__) \
406 EEVEE_MAT_GEOM_VARIATIONS(name##_shadow_tbdr, "eevee_surf_shadow_tbdr", __VA_ARGS__)
#define VOLUME_PROP_SCATTERING_IMG_SLOT
#define DEFERRED_GBUFFER_ROG_ID
#define RBUFS_UTILITY_TEX_SLOT
#define VOLUME_HIT_DEPTH_SLOT
#define SAMPLING_BUF_SLOT
#define VOLUME_PROP_PHASE_WEIGHT_IMG_SLOT
#define VOLUME_HIT_COUNT_SLOT
#define RBUFS_CRYPTOMATTE_SLOT
#define VOLUME_OCCUPANCY_SLOT
#define GBUF_CLOSURE_SLOT
#define SHADOW_ATLAS_IMG_SLOT
#define SHADOW_RENDER_MAP_BUF_SLOT
#define CRYPTOMATTE_BUF_SLOT
#define VOLUME_PROP_EXTINCTION_IMG_SLOT
#define SHADOW_RENDER_VIEW_BUF_SLOT
#define VOLUME_PROP_PHASE_IMG_SLOT
#define VOLUME_PROP_EMISSION_IMG_SLOT
out_scattering_img out_emissive_img GPU_R16F
out_scattering_img out_emissive_img out_phase_weight_img eevee_shared
DualBlend::SRC_0 eevee_sampling_data
push_constant(Type::FLOAT, "world_opacity_fade") .push_constant(Type eevee_global_ubo
#define EEVEE_MAT_PIPE_VARIATIONS(name,...)
push_constant(Type::FLOAT, "world_opacity_fade") .push_constant(Type eevee_cryptomatte_out
out_radiance out_gbuf_normal out_gbuf_closure2 GPU_RG16
DualBlend::SRC_0 eevee_utility_texture
push_constant(Type::FLOAT, "world_opacity_fade") .push_constant(Type eevee_render_pass_out
SHADOW_TILEMAP_RES tiles_buf[] statistics_buf render_view_buf[SHADOW_VIEW_MAX] GPU_R32UI
#define GPU_SHADER_INTERFACE_INFO(_interface, _inst_name)
#define GPU_SHADER_CREATE_INFO(_info)