Blender V5.0
eevee_lightprobe_volume_infos.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#ifdef GPU_SHADER
6# pragma once
7# include "gpu_shader_compat.hh"
8
10# include "draw_view_infos.hh"
11# include "eevee_common_infos.hh"
12# include "eevee_debug_shared.hh"
14
15# define SPHERE_PROBE
16#endif
17
18#include "eevee_defines.hh"
20
21/* -------------------------------------------------------------------- */
24
25GPU_SHADER_INTERFACE_INFO(eevee_debug_surfel_iface)
27FLAT(int, surfel_index)
29
30GPU_SHADER_CREATE_INFO(eevee_debug_surfels)
31TYPEDEF_SOURCE("draw_shader_shared.hh")
32TYPEDEF_SOURCE("eevee_defines.hh")
33TYPEDEF_SOURCE("eevee_debug_shared.hh")
34TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
35ADDITIONAL_INFO(draw_view)
36VERTEX_SOURCE("eevee_debug_surfels_vert.glsl")
37VERTEX_OUT(eevee_debug_surfel_iface)
38FRAGMENT_SOURCE("eevee_debug_surfels_frag.glsl")
39FRAGMENT_OUT(0, float4, out_color)
40STORAGE_BUF(0, read, Surfel, surfels_buf[])
41PUSH_CONSTANT(float, debug_surfel_radius)
42PUSH_CONSTANT(int, debug_mode)
43BUILTINS(BuiltinBits::CLIP_CONTROL)
46
47GPU_SHADER_INTERFACE_INFO(eevee_debug_irradiance_grid_iface)
48SMOOTH(float4, interp_color)
50
51GPU_SHADER_CREATE_INFO(eevee_debug_irradiance_grid)
52TYPEDEF_SOURCE("eevee_defines.hh")
53TYPEDEF_SOURCE("eevee_debug_shared.hh")
54TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
55ADDITIONAL_INFO(draw_view)
56FRAGMENT_OUT(0, float4, out_color)
57VERTEX_OUT(eevee_debug_irradiance_grid_iface)
58SAMPLER(0, sampler3D, debug_data_tx)
59PUSH_CONSTANT(float4x4, grid_mat)
60PUSH_CONSTANT(int, debug_mode)
61PUSH_CONSTANT(float, debug_value)
62VERTEX_SOURCE("eevee_debug_irradiance_grid_vert.glsl")
63FRAGMENT_SOURCE("eevee_debug_irradiance_grid_frag.glsl")
64BUILTINS(BuiltinBits::CLIP_CONTROL)
67
68GPU_SHADER_INTERFACE_INFO(eevee_display_lightprobe_volume_iface)
69SMOOTH(float2, lP)
70FLAT(int3, cell)
72
73GPU_SHADER_CREATE_INFO(eevee_display_lightprobe_volume)
74TYPEDEF_SOURCE("eevee_defines.hh")
75TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
76ADDITIONAL_INFO(draw_view)
77VERTEX_SOURCE("eevee_display_lightprobe_volume_vert.glsl")
78VERTEX_OUT(eevee_display_lightprobe_volume_iface)
79FRAGMENT_SOURCE("eevee_display_lightprobe_volume_frag.glsl")
80FRAGMENT_OUT(0, float4, out_color)
81PUSH_CONSTANT(float, sphere_radius)
82PUSH_CONSTANT(int3, grid_resolution)
84PUSH_CONSTANT(float4x4, world_to_grid)
85PUSH_CONSTANT(bool, display_validity)
86SAMPLER(0, sampler3D, irradiance_a_tx)
87SAMPLER(1, sampler3D, irradiance_b_tx)
88SAMPLER(2, sampler3D, irradiance_c_tx)
89SAMPLER(3, sampler3D, irradiance_d_tx)
90SAMPLER(4, sampler3D, validity_tx)
91BUILTINS(BuiltinBits::CLIP_CONTROL)
94
96
97/* -------------------------------------------------------------------- */
100
101GPU_SHADER_CREATE_INFO(eevee_surfel_light)
102DEFINE("LIGHT_ITER_FORCE_NO_CULLING")
103DEFINE_VALUE("LIGHT_CLOSURE_EVAL_COUNT", "1")
105TYPEDEF_SOURCE("eevee_defines.hh")
106TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
107ADDITIONAL_INFO(draw_view)
108ADDITIONAL_INFO(eevee_global_ubo)
109ADDITIONAL_INFO(eevee_utility_texture)
110ADDITIONAL_INFO(eevee_surfel_common)
111ADDITIONAL_INFO(eevee_light_data)
112ADDITIONAL_INFO(eevee_shadow_data)
113COMPUTE_SOURCE("eevee_surfel_light_comp.glsl")
116
117GPU_SHADER_CREATE_INFO(eevee_surfel_cluster_build)
119BUILTINS(BuiltinBits::TEXTURE_ATOMIC)
120TYPEDEF_SOURCE("eevee_defines.hh")
121TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
122ADDITIONAL_INFO(eevee_surfel_common)
123ADDITIONAL_INFO(draw_view)
124IMAGE(0, SINT_32, read_write, iimage3DAtomic, cluster_list_img)
125COMPUTE_SOURCE("eevee_surfel_cluster_build_comp.glsl")
128
129GPU_SHADER_CREATE_INFO(eevee_surfel_list_prepare)
131BUILTINS(BuiltinBits::TEXTURE_ATOMIC)
132TYPEDEF_SOURCE("eevee_defines.hh")
133TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
134ADDITIONAL_INFO(eevee_surfel_common)
135ADDITIONAL_INFO(draw_view)
136STORAGE_BUF(0, read_write, int, list_counter_buf[])
137STORAGE_BUF(6, read_write, SurfelListInfoData, list_info_buf)
138COMPUTE_SOURCE("eevee_surfel_list_prepare_comp.glsl")
141
142GPU_SHADER_CREATE_INFO(eevee_surfel_list_prefix)
144BUILTINS(BuiltinBits::TEXTURE_ATOMIC)
145TYPEDEF_SOURCE("eevee_defines.hh")
146TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
147ADDITIONAL_INFO(eevee_surfel_common)
148ADDITIONAL_INFO(draw_view)
149STORAGE_BUF(0, read, int, list_counter_buf[])
150STORAGE_BUF(2, write, int, list_range_buf[])
151STORAGE_BUF(6, read_write, SurfelListInfoData, list_info_buf)
152COMPUTE_SOURCE("eevee_surfel_list_prefix_comp.glsl")
155
156GPU_SHADER_CREATE_INFO(eevee_surfel_list_flatten)
158BUILTINS(BuiltinBits::TEXTURE_ATOMIC)
159TYPEDEF_SOURCE("eevee_defines.hh")
160TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
161ADDITIONAL_INFO(eevee_surfel_common)
162ADDITIONAL_INFO(draw_view)
163STORAGE_BUF(0, read_write, int, list_counter_buf[])
164STORAGE_BUF(1, read, int, list_range_buf[])
165STORAGE_BUF(2, write, float, list_item_distance_buf[])
166STORAGE_BUF(3, write, int, list_item_surfel_id_buf[])
167STORAGE_BUF(6, read, SurfelListInfoData, list_info_buf)
168COMPUTE_SOURCE("eevee_surfel_list_flatten_comp.glsl")
171
172GPU_SHADER_CREATE_INFO(eevee_surfel_list_sort)
174TYPEDEF_SOURCE("eevee_defines.hh")
175TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
176ADDITIONAL_INFO(eevee_surfel_common)
177ADDITIONAL_INFO(draw_view)
178STORAGE_BUF(0, read, int, list_range_buf[])
179STORAGE_BUF(1, read, int, list_item_surfel_id_buf[])
180STORAGE_BUF(2, read, float, list_item_distance_buf[])
181STORAGE_BUF(3, write, int, sorted_surfel_id_buf[])
182STORAGE_BUF(6, read, SurfelListInfoData, list_info_buf)
183COMPUTE_SOURCE("eevee_surfel_list_sort_comp.glsl")
186
187GPU_SHADER_CREATE_INFO(eevee_surfel_list_build)
189BUILTINS(BuiltinBits::TEXTURE_ATOMIC)
190TYPEDEF_SOURCE("eevee_defines.hh")
191TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
192ADDITIONAL_INFO(eevee_surfel_common)
193ADDITIONAL_INFO(draw_view)
194STORAGE_BUF(0, write, int, list_start_buf[])
195STORAGE_BUF(1, read, int, list_range_buf[])
196STORAGE_BUF(3, read, int, sorted_surfel_id_buf[])
197STORAGE_BUF(6, read_write, SurfelListInfoData, list_info_buf)
198COMPUTE_SOURCE("eevee_surfel_list_build_comp.glsl")
201
202GPU_SHADER_CREATE_INFO(eevee_surfel_ray)
204TYPEDEF_SOURCE("eevee_defines.hh")
205TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
206ADDITIONAL_INFO(eevee_surfel_common)
207ADDITIONAL_INFO(eevee_lightprobe_sphere_data)
208ADDITIONAL_INFO(draw_view)
209PUSH_CONSTANT(int, radiance_src)
210PUSH_CONSTANT(int, radiance_dst)
211COMPUTE_SOURCE("eevee_surfel_ray_comp.glsl")
214
215GPU_SHADER_CREATE_INFO(eevee_lightprobe_volume_bounds)
218STORAGE_BUF(0, read_write, CaptureInfoData, capture_info_buf)
219STORAGE_BUF(1, read, ObjectBounds, bounds_buf[])
220PUSH_CONSTANT(int, resource_len)
221TYPEDEF_SOURCE("draw_shader_shared.hh")
222TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
223TYPEDEF_SOURCE("eevee_defines.hh")
224COMPUTE_SOURCE("eevee_lightprobe_volume_bounds_comp.glsl")
226
227GPU_SHADER_CREATE_INFO(eevee_lightprobe_volume_ray)
231TYPEDEF_SOURCE("eevee_defines.hh")
232TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
233ADDITIONAL_INFO(eevee_surfel_common)
234ADDITIONAL_INFO(eevee_lightprobe_sphere_data)
235ADDITIONAL_INFO(draw_view)
236PUSH_CONSTANT(int, radiance_src)
237STORAGE_BUF(0, read, int, list_start_buf[])
238STORAGE_BUF(6, read, SurfelListInfoData, list_info_buf)
239IMAGE(0, SFLOAT_32_32_32_32, read_write, image3D, irradiance_L0_img)
240IMAGE(1, SFLOAT_32_32_32_32, read_write, image3D, irradiance_L1_a_img)
241IMAGE(2, SFLOAT_32_32_32_32, read_write, image3D, irradiance_L1_b_img)
242IMAGE(3, SFLOAT_32_32_32_32, read_write, image3D, irradiance_L1_c_img)
243IMAGE(4, SFLOAT_16_16_16_16, read, image3D, virtual_offset_img)
244IMAGE(5, SFLOAT_32, read_write, image3D, validity_img)
245COMPUTE_SOURCE("eevee_lightprobe_volume_ray_comp.glsl")
248
249GPU_SHADER_CREATE_INFO(eevee_lightprobe_volume_offset)
253TYPEDEF_SOURCE("eevee_defines.hh")
254TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
255ADDITIONAL_INFO(eevee_surfel_common)
256ADDITIONAL_INFO(draw_view)
257STORAGE_BUF(0, read, int, list_start_buf[])
258STORAGE_BUF(6, read, SurfelListInfoData, list_info_buf)
259IMAGE(0, SINT_32, read, iimage3DAtomic, cluster_list_img)
260IMAGE(1, SFLOAT_16_16_16_16, read_write, image3D, virtual_offset_img)
261COMPUTE_SOURCE("eevee_lightprobe_volume_offset_comp.glsl")
264
266
267/* -------------------------------------------------------------------- */
270
271GPU_SHADER_CREATE_INFO(eevee_lightprobe_volume_world)
275DEFINE("IRRADIANCE_GRID_UPLOAD")
276TYPEDEF_SOURCE("eevee_defines.hh")
277TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
278ADDITIONAL_INFO(eevee_global_ubo)
279PUSH_CONSTANT(int, grid_index)
280STORAGE_BUF(0, read, uint, bricks_infos_buf[])
281STORAGE_BUF(1, read, SphereProbeHarmonic, harmonic_buf)
282UNIFORM_BUF(0, VolumeProbeData, grids_infos_buf[IRRADIANCE_GRID_MAX])
283IMAGE(0, VOLUME_PROBE_FORMAT, write, image3D, irradiance_atlas_img)
284COMPUTE_SOURCE("eevee_lightprobe_volume_world_comp.glsl")
287
288GPU_SHADER_CREATE_INFO(eevee_lightprobe_volume_load)
292DEFINE("IRRADIANCE_GRID_UPLOAD")
293TYPEDEF_SOURCE("eevee_defines.hh")
294TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
295ADDITIONAL_INFO(eevee_global_ubo)
296PUSH_CONSTANT(float4x4, grid_local_to_world)
297PUSH_CONSTANT(int, grid_index)
298PUSH_CONSTANT(int, grid_start_index)
299PUSH_CONSTANT(float, validity_threshold)
300PUSH_CONSTANT(float, dilation_threshold)
301PUSH_CONSTANT(float, dilation_radius)
302PUSH_CONSTANT(float, grid_intensity_factor)
303UNIFORM_BUF(0, VolumeProbeData, grids_infos_buf[IRRADIANCE_GRID_MAX])
304STORAGE_BUF(0, read, uint, bricks_infos_buf[])
305SAMPLER(0, sampler3D, irradiance_a_tx)
306SAMPLER(1, sampler3D, irradiance_b_tx)
307SAMPLER(2, sampler3D, irradiance_c_tx)
308SAMPLER(3, sampler3D, irradiance_d_tx)
309SAMPLER(4, sampler3D, visibility_a_tx)
310SAMPLER(5, sampler3D, visibility_b_tx)
311SAMPLER(6, sampler3D, visibility_c_tx)
312SAMPLER(7, sampler3D, visibility_d_tx)
313SAMPLER(8, sampler3D, irradiance_atlas_tx)
314SAMPLER(9, sampler3D, validity_tx)
315IMAGE(0, VOLUME_PROBE_FORMAT, write, image3D, irradiance_atlas_img)
316COMPUTE_SOURCE("eevee_lightprobe_volume_load_comp.glsl")
319
unsigned int uint
#define SURFEL_GROUP_SIZE
#define IRRADIANCE_BOUNDS_GROUP_SIZE
#define SURFEL_LIST_GROUP_SIZE
#define IRRADIANCE_GRID_MAX
#define IRRADIANCE_GRID_BRICK_SIZE
#define IRRADIANCE_GRID_GROUP_SIZE
#define VOLUME_PROBE_FORMAT
#define GPU_SHADER_INTERFACE_END()
#define GPU_SHADER_INTERFACE_INFO(_interface)
#define GPU_SHADER_CREATE_INFO(_info)
#define GPU_SHADER_CREATE_END()
#define TYPEDEF_SOURCE(filename)
#define VERTEX_OUT(stage_interface)
#define SMOOTH(type, name)
#define SAMPLER(slot, type, name)
#define UNIFORM_BUF(slot, type_name, name)
#define FRAGMENT_SOURCE(filename)
#define ADDITIONAL_INFO(info_name)
#define PUSH_CONSTANT(type, name)
#define DEFINE(name)
#define FLAT(type, name)
#define FRAGMENT_OUT(slot, type, name)
#define BUILTINS(builtin)
#define STORAGE_BUF(slot, qualifiers, type_name, name)
#define VERTEX_SOURCE(filename)
#define LOCAL_GROUP_SIZE(...)
#define IMAGE(slot, format, qualifiers, type, name)
#define COMPUTE_SOURCE(filename)
#define DO_STATIC_COMPILATION()
#define DEFINE_VALUE(name, value)
ImageBase< int, 3, false, true > iimage3DAtomic
ImageBase< float, 3 > image3D
MatBase< 4, 4 > float4x4
SamplerBase< float, 3 > sampler3D
BLI_INLINE void grid_to_world(HairGrid *grid, float vecw[3], const float vec[3])