Blender V5.0
eevee_shadow_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"
13# include "eevee_shadow_shared.hh"
15
16# define SPHERE_PROBE
17#endif
18
19#include "draw_defines.hh"
20#include "eevee_defines.hh"
21
23
24/* -------------------------------------------------------------------- */
27
28GPU_SHADER_CREATE_INFO(eevee_shadow_clipmap_clear)
31STORAGE_BUF(0, write, ShadowTileMapClip, tilemaps_clip_buf[])
32PUSH_CONSTANT(int, tilemaps_clip_buf_len)
33TYPEDEF_SOURCE("eevee_defines.hh")
34TYPEDEF_SOURCE("eevee_shadow_shared.hh")
35COMPUTE_SOURCE("eevee_shadow_clipmap_clear_comp.glsl")
37
38GPU_SHADER_CREATE_INFO(eevee_shadow_tilemap_bounds)
41STORAGE_BUF(LIGHT_BUF_SLOT, read_write, LightData, light_buf[])
42STORAGE_BUF(LIGHT_CULL_BUF_SLOT, read, LightCullingData, light_cull_buf)
43STORAGE_BUF(4, read, uint, casters_id_buf[])
44STORAGE_BUF(5, read_write, ShadowTileMapData, tilemaps_buf[])
45STORAGE_BUF(6, read, ObjectBounds, bounds_buf[])
46STORAGE_BUF(7, read_write, ShadowTileMapClip, tilemaps_clip_buf[])
47PUSH_CONSTANT(int, resource_len)
48TYPEDEF_SOURCE("draw_shader_shared.hh")
49TYPEDEF_SOURCE("eevee_shadow_shared.hh")
50COMPUTE_SOURCE("eevee_shadow_tilemap_bounds_comp.glsl")
52
53GPU_SHADER_CREATE_INFO(eevee_shadow_tilemap_init)
56STORAGE_BUF(0, read_write, ShadowTileMapData, tilemaps_buf[])
57STORAGE_BUF(1, read_write, uint, tiles_buf[])
58STORAGE_BUF(2, read_write, ShadowTileMapClip, tilemaps_clip_buf[])
59STORAGE_BUF(4, read_write, uint2, pages_cached_buf[])
60TYPEDEF_SOURCE("eevee_defines.hh")
61TYPEDEF_SOURCE("eevee_shadow_shared.hh")
62COMPUTE_SOURCE("eevee_shadow_tilemap_init_comp.glsl")
64
65GPU_SHADER_CREATE_INFO(eevee_shadow_tag_update)
67LOCAL_GROUP_SIZE(1, 1, 1)
68STORAGE_BUF(0, read_write, ShadowTileMapData, tilemaps_buf[])
69STORAGE_BUF(1, read_write, uint, tiles_buf[])
70STORAGE_BUF(5, read, ObjectBounds, bounds_buf[])
71STORAGE_BUF(6, read, uint, resource_ids_buf[])
72TYPEDEF_SOURCE("eevee_defines.hh")
73TYPEDEF_SOURCE("eevee_shadow_shared.hh")
74ADDITIONAL_INFO(draw_view)
75ADDITIONAL_INFO(draw_view_culling)
76COMPUTE_SOURCE("eevee_shadow_tag_update_comp.glsl")
78
79GPU_SHADER_CREATE_INFO(eevee_shadow_tag_usage_opaque)
82STORAGE_BUF(5, read_write, ShadowTileMapData, tilemaps_buf[])
83STORAGE_BUF(6, read_write, uint, tiles_buf[])
84PUSH_CONSTANT(int2, input_depth_extent)
85TYPEDEF_SOURCE("eevee_defines.hh")
86TYPEDEF_SOURCE("eevee_shadow_shared.hh")
87TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
88ADDITIONAL_INFO(draw_view)
89ADDITIONAL_INFO(draw_view_culling)
90ADDITIONAL_INFO(eevee_hiz_data)
91ADDITIONAL_INFO(eevee_light_data)
92COMPUTE_SOURCE("eevee_shadow_tag_usage_comp.glsl")
94
95GPU_SHADER_CREATE_INFO(eevee_shadow_tag_usage_surfels)
98STORAGE_BUF(6, read_write, ShadowTileMapData, tilemaps_buf[])
99STORAGE_BUF(7, read_write, uint, tiles_buf[])
100PUSH_CONSTANT(int, directional_level)
101TYPEDEF_SOURCE("eevee_defines.hh")
102TYPEDEF_SOURCE("eevee_shadow_shared.hh")
103TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
104ADDITIONAL_INFO(draw_view)
105ADDITIONAL_INFO(draw_view_culling)
106ADDITIONAL_INFO(eevee_light_data)
107ADDITIONAL_INFO(eevee_global_ubo)
108ADDITIONAL_INFO(eevee_surfel_common)
109COMPUTE_SOURCE("eevee_shadow_tag_usage_surfels_comp.glsl")
111
112GPU_SHADER_NAMED_INTERFACE_INFO(eevee_shadow_tag_transparent_iface, interp)
114SMOOTH(float3, vP)
116GPU_SHADER_NAMED_INTERFACE_INFO(eevee_shadow_tag_transparent_flat_iface, interp_flat)
117FLAT(float3, ls_aabb_min)
118FLAT(float3, ls_aabb_max)
120
121GPU_SHADER_CREATE_INFO(eevee_shadow_tag_usage_transparent)
124STORAGE_BUF(4, read, ObjectBounds, bounds_buf[])
125STORAGE_BUF(5, read_write, ShadowTileMapData, tilemaps_buf[])
126STORAGE_BUF(6, read_write, uint, tiles_buf[])
127PUSH_CONSTANT(int2, fb_resolution)
128PUSH_CONSTANT(int, fb_lod)
129VERTEX_OUT(eevee_shadow_tag_transparent_iface)
130VERTEX_OUT(eevee_shadow_tag_transparent_flat_iface)
131TYPEDEF_SOURCE("eevee_defines.hh")
132TYPEDEF_SOURCE("eevee_shadow_shared.hh")
133TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
134ADDITIONAL_INFO(draw_resource_id_varying)
135ADDITIONAL_INFO(draw_view)
136ADDITIONAL_INFO(draw_view_culling)
137ADDITIONAL_INFO(draw_modelmat)
138ADDITIONAL_INFO(eevee_hiz_data)
139ADDITIONAL_INFO(eevee_light_data)
140VERTEX_SOURCE("eevee_shadow_tag_usage_vert.glsl")
141FRAGMENT_SOURCE("eevee_shadow_tag_usage_frag.glsl")
143
144GPU_SHADER_CREATE_INFO(eevee_shadow_tag_usage_volume)
147STORAGE_BUF(4, read_write, ShadowTileMapData, tilemaps_buf[])
148STORAGE_BUF(5, read_write, uint, tiles_buf[])
149ADDITIONAL_INFO(eevee_volume_properties_data)
150TYPEDEF_SOURCE("eevee_defines.hh")
151TYPEDEF_SOURCE("eevee_shadow_shared.hh")
152TYPEDEF_SOURCE("eevee_lightprobe_shared.hh")
153ADDITIONAL_INFO(draw_view)
154ADDITIONAL_INFO(draw_view_culling)
155ADDITIONAL_INFO(eevee_hiz_data)
156ADDITIONAL_INFO(eevee_light_data)
157ADDITIONAL_INFO(eevee_sampling_data)
158COMPUTE_SOURCE("eevee_shadow_tag_usage_volume_comp.glsl")
160
161GPU_SHADER_CREATE_INFO(eevee_shadow_page_mask)
165GROUP_SHARED(uint, levels_rendered)
166GROUP_SHARED(uint, force_base_page)
167PUSH_CONSTANT(int, max_view_per_tilemap)
168STORAGE_BUF(0, read_write, ShadowTileMapData, tilemaps_buf[])
169STORAGE_BUF(1, read_write, uint, tiles_buf[])
170TYPEDEF_SOURCE("eevee_shadow_shared.hh")
171COMPUTE_SOURCE("eevee_shadow_page_mask_comp.glsl")
173
174GPU_SHADER_CREATE_INFO(eevee_shadow_page_free)
177STORAGE_BUF(0, read_write, ShadowTileMapData, tilemaps_buf[])
178STORAGE_BUF(1, read_write, uint, tiles_buf[])
179STORAGE_BUF(2, read_write, ShadowPagesInfoData, pages_infos_buf)
180STORAGE_BUF(3, read_write, uint, pages_free_buf[])
181STORAGE_BUF(4, read_write, uint2, pages_cached_buf[])
182TYPEDEF_SOURCE("eevee_defines.hh")
183TYPEDEF_SOURCE("eevee_shadow_shared.hh")
184COMPUTE_SOURCE("eevee_shadow_page_free_comp.glsl")
186
187GPU_SHADER_CREATE_INFO(eevee_shadow_page_defrag)
190TYPEDEF_SOURCE("draw_shader_shared.hh")
191STORAGE_BUF(1, read_write, uint, tiles_buf[])
192STORAGE_BUF(2, read_write, ShadowPagesInfoData, pages_infos_buf)
193STORAGE_BUF(3, read_write, uint, pages_free_buf[])
194STORAGE_BUF(4, read_write, uint2, pages_cached_buf[])
195STORAGE_BUF(5, write, DispatchCommand, clear_dispatch_buf)
196STORAGE_BUF(6, write, DrawCommand, tile_draw_buf)
197STORAGE_BUF(7, read_write, ShadowStatistics, statistics_buf)
198TYPEDEF_SOURCE("eevee_defines.hh")
199TYPEDEF_SOURCE("eevee_shadow_shared.hh")
200COMPUTE_SOURCE("eevee_shadow_page_defrag_comp.glsl")
202
203GPU_SHADER_CREATE_INFO(eevee_shadow_page_allocate)
206TYPEDEF_SOURCE("draw_shader_shared.hh")
207STORAGE_BUF(0, read_write, ShadowTileMapData, tilemaps_buf[])
208STORAGE_BUF(1, read_write, uint, tiles_buf[])
209STORAGE_BUF(2, read_write, ShadowPagesInfoData, pages_infos_buf)
210STORAGE_BUF(3, read_write, uint, pages_free_buf[])
211STORAGE_BUF(4, read_write, uint2, pages_cached_buf[])
212STORAGE_BUF(6, read_write, ShadowStatistics, statistics_buf)
213TYPEDEF_SOURCE("eevee_defines.hh")
214TYPEDEF_SOURCE("eevee_shadow_shared.hh")
215COMPUTE_SOURCE("eevee_shadow_page_allocate_comp.glsl")
217
218GPU_SHADER_CREATE_INFO(eevee_shadow_tilemap_finalize)
220TYPEDEF_SOURCE("draw_shader_shared.hh")
222STORAGE_BUF(0, read, ShadowTileMapData, tilemaps_buf[])
223STORAGE_BUF(1, read, uint, tiles_buf[])
224STORAGE_BUF(2, read_write, ShadowPagesInfoData, pages_infos_buf)
225STORAGE_BUF(3, read_write, ShadowStatistics, statistics_buf)
226STORAGE_BUF(4, write, ViewMatrices, view_infos_buf[SHADOW_VIEW_MAX])
227STORAGE_BUF(5, write, ShadowRenderView, render_view_buf[SHADOW_VIEW_MAX])
228STORAGE_BUF(6, read, ShadowTileMapClip, tilemaps_clip_buf[])
229IMAGE(0, UINT_32, write, uimage2D, tilemaps_img)
230TYPEDEF_SOURCE("eevee_defines.hh")
231TYPEDEF_SOURCE("eevee_shadow_shared.hh")
232COMPUTE_SOURCE("eevee_shadow_tilemap_finalize_comp.glsl")
234
235GPU_SHADER_CREATE_INFO(eevee_shadow_tilemap_rendermap)
237TYPEDEF_SOURCE("draw_shader_shared.hh")
239STORAGE_BUF(0, read_write, ShadowStatistics, statistics_buf)
240STORAGE_BUF(1, read, ShadowRenderView, render_view_buf[SHADOW_VIEW_MAX])
241STORAGE_BUF(2, read_write, uint, tiles_buf[])
242STORAGE_BUF(3, read_write, DispatchCommand, clear_dispatch_buf)
243STORAGE_BUF(4, read_write, DrawCommand, tile_draw_buf)
244STORAGE_BUF(5, write, uint, dst_coord_buf[SHADOW_RENDER_MAP_SIZE])
245STORAGE_BUF(6, write, uint, src_coord_buf[SHADOW_RENDER_MAP_SIZE])
246STORAGE_BUF(7, write, uint, render_map_buf[SHADOW_RENDER_MAP_SIZE])
247TYPEDEF_SOURCE("eevee_defines.hh")
248TYPEDEF_SOURCE("eevee_shadow_shared.hh")
249COMPUTE_SOURCE("eevee_shadow_tilemap_rendermap_comp.glsl")
251
252GPU_SHADER_CREATE_INFO(eevee_shadow_tilemap_amend)
255IMAGE(0, UINT_32, read_write, uimage2D, tilemaps_img)
256STORAGE_BUF(LIGHT_CULL_BUF_SLOT, read, LightCullingData, light_cull_buf)
257STORAGE_BUF(LIGHT_BUF_SLOT, read_write, LightData, light_buf[])
258/* The call bind_resources(lights) also uses LIGHT_ZBIN_BUF_SLOT and LIGHT_TILE_BUF_SLOT. */
259STORAGE_BUF(4, read, ShadowTileMapData, tilemaps_buf[])
260TYPEDEF_SOURCE("eevee_defines.hh")
261TYPEDEF_SOURCE("eevee_shadow_shared.hh")
262ADDITIONAL_INFO(draw_view)
263COMPUTE_SOURCE("eevee_shadow_tilemap_amend_comp.glsl")
265
266/* AtomicMin clear implementation. */
267GPU_SHADER_CREATE_INFO(eevee_shadow_page_clear)
270STORAGE_BUF(2, read, ShadowPagesInfoData, pages_infos_buf)
271STORAGE_BUF(6, read, uint, dst_coord_buf[SHADOW_RENDER_MAP_SIZE])
272TYPEDEF_SOURCE("eevee_defines.hh")
273TYPEDEF_SOURCE("eevee_shadow_shared.hh")
274COMPUTE_SOURCE("eevee_shadow_page_clear_comp.glsl")
275IMAGE(SHADOW_ATLAS_IMG_SLOT, UINT_32, read_write, uimage2DArrayAtomic, shadow_atlas_img)
277
278/* TBDR clear implementation. */
279GPU_SHADER_CREATE_INFO(eevee_shadow_page_tile_clear)
281DEFINE("PASS_CLEAR")
282TYPEDEF_SOURCE("eevee_defines.hh")
283TYPEDEF_SOURCE("eevee_shadow_shared.hh")
284BUILTINS(BuiltinBits::VIEWPORT_INDEX | BuiltinBits::LAYER)
285STORAGE_BUF(8, read, uint, src_coord_buf[SHADOW_RENDER_MAP_SIZE])
286VERTEX_SOURCE("eevee_shadow_page_tile_vert.glsl")
287FRAGMENT_SOURCE("eevee_shadow_page_tile_frag.glsl")
288FRAGMENT_OUT_ROG(0, float, out_tile_depth, SHADOW_ROG_ID)
290
291/* Interface for passing precalculated values in accumulation vertex to frag. */
292GPU_SHADER_NAMED_INTERFACE_INFO(eevee_shadow_page_tile_store_noperspective_iface,
293 interp_noperspective)
294NO_PERSPECTIVE(float2, out_texel_xy)
295GPU_SHADER_NAMED_INTERFACE_END(interp_noperspective)
296GPU_SHADER_NAMED_INTERFACE_INFO(eevee_shadow_page_tile_store_flat_iface, interp_flat)
297#ifdef APPLE
298/* Metal supports ushort which saves a bit of performance here. */
299FLAT(ushort, out_page_z)
300#else
301FLAT(uint, out_page_z)
302#endif
304
305/* 2nd tile pass to store shadow depths in atlas. */
306GPU_SHADER_CREATE_INFO(eevee_shadow_page_tile_store)
308DEFINE("PASS_DEPTH_STORE")
309TYPEDEF_SOURCE("eevee_defines.hh")
310TYPEDEF_SOURCE("eevee_shadow_shared.hh")
311BUILTINS(BuiltinBits::VIEWPORT_INDEX | BuiltinBits::LAYER)
312STORAGE_BUF(7, read, uint, dst_coord_buf[SHADOW_RENDER_MAP_SIZE])
313STORAGE_BUF(8, read, uint, src_coord_buf[SHADOW_RENDER_MAP_SIZE])
314SUBPASS_IN(0, float, Float2DArray, in_tile_depth, SHADOW_ROG_ID)
315IMAGE(SHADOW_ATLAS_IMG_SLOT, UINT_32, read_write, uimage2DArray, shadow_atlas_img)
316VERTEX_OUT(eevee_shadow_page_tile_store_noperspective_iface)
317VERTEX_OUT(eevee_shadow_page_tile_store_flat_iface)
318VERTEX_SOURCE("eevee_shadow_page_tile_vert.glsl")
319FRAGMENT_SOURCE("eevee_shadow_page_tile_frag.glsl")
321
322/* Custom visibility check pass. */
323GPU_SHADER_CREATE_INFO(eevee_shadow_view_visibility)
325TYPEDEF_SOURCE("eevee_defines.hh")
326TYPEDEF_SOURCE("eevee_shadow_shared.hh")
328DEFINE_VALUE("DRW_VIEW_LEN", STRINGIFY(DRW_VIEW_MAX))
329STORAGE_BUF(0, read, ObjectBounds, bounds_buf[])
330STORAGE_BUF(1, read_write, uint, visibility_buf[])
331STORAGE_BUF(2, read, ShadowRenderView, render_view_buf[SHADOW_VIEW_MAX])
332PUSH_CONSTANT(int, resource_len)
333PUSH_CONSTANT(int, view_len)
334PUSH_CONSTANT(int, visibility_word_per_draw)
335COMPUTE_SOURCE("eevee_shadow_visibility_comp.glsl")
336ADDITIONAL_INFO(draw_view)
337ADDITIONAL_INFO(draw_view_culling)
338ADDITIONAL_INFO(draw_object_infos)
340
342
343/* -------------------------------------------------------------------- */
346
347GPU_SHADER_CREATE_INFO(eevee_shadow_debug)
349TYPEDEF_SOURCE("eevee_defines.hh")
350TYPEDEF_SOURCE("eevee_debug_shared.hh")
351TYPEDEF_SOURCE("eevee_shadow_shared.hh")
352STORAGE_BUF(5, read, ShadowTileMapData, tilemaps_buf[])
353STORAGE_BUF(6, read, uint, tiles_buf[])
354FRAGMENT_OUT_DUAL(0, float4, out_color_add, SRC_0)
355FRAGMENT_OUT_DUAL(0, float4, out_color_mul, SRC_1)
356PUSH_CONSTANT(int, debug_mode)
357PUSH_CONSTANT(int, debug_tilemap_index)
359FRAGMENT_SOURCE("eevee_shadow_debug_frag.glsl")
360ADDITIONAL_INFO(gpu_fullscreen)
361ADDITIONAL_INFO(draw_view)
362ADDITIONAL_INFO(eevee_hiz_data)
363ADDITIONAL_INFO(eevee_light_data)
364ADDITIONAL_INFO(eevee_shadow_data)
366
unsigned int uint
unsigned short ushort
#define STRINGIFY(x)
#define DRW_VISIBILITY_GROUP_SIZE
#define DRW_VIEW_MAX
#define SURFEL_GROUP_SIZE
#define SHADOW_TILEMAP_RES
#define LIGHT_BUF_SLOT
#define SHADOW_PAGE_CLEAR_GROUP_SIZE
#define SHADOW_CLIPMAP_GROUP_SIZE
#define SHADOW_TILEMAP_LOD0_LEN
#define SHADOW_VIEW_MAX
#define SHADOW_DEPTH_SCAN_GROUP_SIZE
#define VOLUME_GROUP_SIZE
#define SHADOW_TILEDATA_PER_TILEMAP
#define SHADOW_BOUNDS_GROUP_SIZE
#define SHADOW_ATLAS_IMG_SLOT
#define LIGHT_CULL_BUF_SLOT
#define SHADOW_RENDER_MAP_SIZE
#define SHADOW_ROG_ID
uint pos
#define GPU_SHADER_NAMED_INTERFACE_INFO(_interface, _inst_name)
#define GPU_SHADER_NAMED_INTERFACE_END(_inst_name)
#define GPU_SHADER_CREATE_INFO(_info)
#define GPU_SHADER_CREATE_END()
#define TYPEDEF_SOURCE(filename)
#define VERTEX_OUT(stage_interface)
#define FRAGMENT_OUT_DUAL(slot, type, name, blend)
#define SMOOTH(type, name)
#define FRAGMENT_SOURCE(filename)
#define ADDITIONAL_INFO(info_name)
#define PUSH_CONSTANT(type, name)
#define GROUP_SHARED(type, name)
#define DEFINE(name)
#define FLAT(type, name)
#define NO_PERSPECTIVE(type, name)
#define BUILTINS(builtin)
#define STORAGE_BUF(slot, qualifiers, type_name, name)
#define SUBPASS_IN(slot, type, img_type, name, rog)
#define VERTEX_SOURCE(filename)
#define LOCAL_GROUP_SIZE(...)
#define VERTEX_IN(slot, type, name)
#define IMAGE(slot, format, qualifiers, type, name)
#define COMPUTE_SOURCE(filename)
#define DO_STATIC_COMPILATION()
#define DEPTH_WRITE(value)
#define DEFINE_VALUE(name, value)
#define FRAGMENT_OUT_ROG(slot, type, name, rog)
ImageBase< uint, 2, true, true > uimage2DArrayAtomic
ImageBase< uint, 2 > uimage2D
ImageBase< uint, 2, true > uimage2DArray
ccl_device_inline float interp(const float a, const float b, const float t)
Definition math_base.h:502