Blender V5.0
eevee_defines.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2021 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
11
12#ifndef GPU_SHADER
13# pragma once
14#endif
15
16#ifndef SQUARE
17# define SQUARE(x) ((x) * (x))
18#endif
19
20/* Look Up Tables. */
21#define LUT_WORKGROUP_SIZE 16
22
23/* Hierarchical Z down-sampling. */
24#define HIZ_MIP_COUNT 7
25/* NOTE: The shader is written to update 5 mipmaps using LDS. */
26#define HIZ_GROUP_SIZE 32
27
28/* Avoid too much overhead caused by resizing the light buffers too many time. */
29#define LIGHT_CHUNK 256
30
31#define CULLING_SELECT_GROUP_SIZE 256
32#define CULLING_SORT_GROUP_SIZE 256
33#define CULLING_ZBIN_GROUP_SIZE 1024
34#define CULLING_TILE_GROUP_SIZE 256
35
36/* Reflection Probes. */
37/* When changed update parallel sum loop in `eevee_lightprobe_sphere_remap_comp.glsl`. */
38#define SPHERE_PROBE_REMAP_GROUP_SIZE 32
39#define SPHERE_PROBE_GROUP_SIZE 16
40#define SPHERE_PROBE_SELECT_GROUP_SIZE 64
41#define SPHERE_PROBE_MIPMAP_LEVELS 5
42#define SPHERE_PROBE_SH_GROUP_SIZE 256
43#define SPHERE_PROBE_SH_SAMPLES_PER_GROUP 64
44/* Must be power of two for correct partitioning. */
45#define SPHERE_PROBE_ATLAS_MAX_SUBDIV 12
46#define SPHERE_PROBE_ATLAS_RES (1 << SPHERE_PROBE_ATLAS_MAX_SUBDIV)
47/* Maximum number of thread-groups dispatched for remapping a probe to octahedral mapping. */
48#define SPHERE_PROBE_MAX_HARMONIC SQUARE(SPHERE_PROBE_ATLAS_RES / SPHERE_PROBE_REMAP_GROUP_SIZE)
49/* Start and end value for mixing sphere probe and volume probes. */
50#define SPHERE_PROBE_MIX_START_ROUGHNESS 0.7
51#define SPHERE_PROBE_MIX_END_ROUGHNESS 0.9
52/* Roughness of the last mip map for sphere probes. */
53#define SPHERE_PROBE_MIP_MAX_ROUGHNESS 0.7
57#define SPHERE_PROBE_MAX 128
58
60#define VOLUME_PROBE_FORMAT SFLOAT_16_16_16_16
61
67#define PLANAR_PROBE_MAX 16
68
75#if 0
76/* Useful for debugging the tile-copy version of the shadow rendering without making debugging
77 * tools unresponsive. */
78# define SHADOW_TILEMAP_RES 4
79# define SHADOW_TILEMAP_LOD 2 /* LOG2(SHADOW_TILEMAP_RES) */
80#else
81# define SHADOW_TILEMAP_RES 32
82# define SHADOW_TILEMAP_LOD 5 /* LOG2(SHADOW_TILEMAP_RES) */
83#endif
84#define SHADOW_TILEMAP_LOD0_LEN ((SHADOW_TILEMAP_RES / 1) * (SHADOW_TILEMAP_RES / 1))
85#define SHADOW_TILEMAP_LOD1_LEN ((SHADOW_TILEMAP_RES / 2) * (SHADOW_TILEMAP_RES / 2))
86#define SHADOW_TILEMAP_LOD2_LEN ((SHADOW_TILEMAP_RES / 4) * (SHADOW_TILEMAP_RES / 4))
87#define SHADOW_TILEMAP_LOD3_LEN ((SHADOW_TILEMAP_RES / 8) * (SHADOW_TILEMAP_RES / 8))
88#define SHADOW_TILEMAP_LOD4_LEN ((SHADOW_TILEMAP_RES / 16) * (SHADOW_TILEMAP_RES / 16))
89#define SHADOW_TILEMAP_LOD5_LEN ((SHADOW_TILEMAP_RES / 32) * (SHADOW_TILEMAP_RES / 32))
90#define SHADOW_TILEMAP_PER_ROW 64
91#define SHADOW_TILEDATA_PER_TILEMAP \
92 (SHADOW_TILEMAP_LOD0_LEN + SHADOW_TILEMAP_LOD1_LEN + SHADOW_TILEMAP_LOD2_LEN + \
93 SHADOW_TILEMAP_LOD3_LEN + SHADOW_TILEMAP_LOD4_LEN + SHADOW_TILEMAP_LOD5_LEN)
94/* Maximum number of relative LOD distance we can store. */
95#define SHADOW_TILEMAP_MAX_CLIPMAP_LOD 8
96#if 0
97/* Useful for debugging the tile-copy version of the shadow rendering without making debugging
98 * tools unresponsive. */
99# define SHADOW_PAGE_CLEAR_GROUP_SIZE 8
100# define SHADOW_PAGE_RES 8
101# define SHADOW_PAGE_LOD 3 /* LOG2(SHADOW_PAGE_RES) */
102#else
103# define SHADOW_PAGE_CLEAR_GROUP_SIZE 32
104# define SHADOW_PAGE_RES 256
105# define SHADOW_PAGE_LOD 8 /* LOG2(SHADOW_PAGE_RES) */
106#endif
107/* For testing only. */
108// #define SHADOW_FORCE_LOD0
109#define SHADOW_MAP_MAX_RES (SHADOW_PAGE_RES * SHADOW_TILEMAP_RES)
110#define SHADOW_DEPTH_SCAN_GROUP_SIZE 8
111#define SHADOW_AABB_TAG_GROUP_SIZE 64
112#define SHADOW_MAX_TILEMAP 4096
113#define SHADOW_MAX_TILE (SHADOW_MAX_TILEMAP * SHADOW_TILEDATA_PER_TILEMAP)
114#define SHADOW_MAX_PAGE 4096
115#define SHADOW_BOUNDS_GROUP_SIZE 64
116#define SHADOW_CLIPMAP_GROUP_SIZE 64
117#define SHADOW_VIEW_MAX 64 /* Must match DRW_VIEW_MAX. */
118#define SHADOW_RENDER_MAP_SIZE (SHADOW_VIEW_MAX * SHADOW_TILEMAP_LOD0_LEN)
119#define SHADOW_ATOMIC 1
120#define SHADOW_PAGE_PER_ROW 4
121#define SHADOW_PAGE_PER_COL 4
122#define SHADOW_PAGE_PER_LAYER (SHADOW_PAGE_PER_ROW * SHADOW_PAGE_PER_COL)
123#define SHADOW_MAX_STEP 16
124#define SHADOW_MAX_RAY 4
125#define SHADOW_ROG_ID 0
126
127/* Gbuffer. */
129#define GBUF_HEADER_FB_LAYER_COUNT 1
130#define GBUF_CLOSURE_FB_LAYER_COUNT 2
131#define GBUF_NORMAL_FB_LAYER_COUNT 1
132
133/* Deferred Lighting. */
134#define DEFERRED_RADIANCE_FORMAT UINT_32
135#define DEFERRED_GBUFFER_ROG_ID 0
136
137/* Ray-tracing. */
138#define RAYTRACE_GROUP_SIZE 8
139/* Keep this as a define to avoid shader variations. */
140#define RAYTRACE_RADIANCE_FORMAT UFLOAT_11_11_10
141#define RAYTRACE_RAYTIME_FORMAT SFLOAT_32
142#define RAYTRACE_VARIANCE_FORMAT SFLOAT_16
143#define RAYTRACE_TILEMASK_FORMAT UINT_8
144
145/* Sub-Surface Scattering. */
146#define SUBSURFACE_GROUP_SIZE RAYTRACE_GROUP_SIZE
147#define SUBSURFACE_RADIANCE_FORMAT UFLOAT_11_11_10
148#define SUBSURFACE_OBJECT_ID_FORMAT UINT_16
149
150/* Film. */
151#define FILM_GROUP_SIZE 16
152
153/* Motion Blur. */
154#define MOTION_BLUR_GROUP_SIZE 32
155#define MOTION_BLUR_DILATE_GROUP_SIZE 512
156
157/* Irradiance Cache. */
159#define IRRADIANCE_GRID_MAX 64
160
161/* Depth Of Field. */
162#define DOF_TILES_SIZE 8
163#define DOF_TILES_FLATTEN_GROUP_SIZE DOF_TILES_SIZE
164#define DOF_TILES_DILATE_GROUP_SIZE 8
165#define DOF_BOKEH_LUT_SIZE 32
166#define DOF_MAX_SLIGHT_FOCUS_RADIUS 5
167#define DOF_SLIGHT_FOCUS_SAMPLE_MAX 16
168#define DOF_MIP_COUNT 4
169#define DOF_REDUCE_GROUP_SIZE (1 << (DOF_MIP_COUNT - 1))
170#define DOF_DEFAULT_GROUP_SIZE 32
171#define DOF_STABILIZE_GROUP_SIZE 16
172#define DOF_FILTER_GROUP_SIZE 8
173#define DOF_GATHER_GROUP_SIZE DOF_TILES_SIZE
174#define DOF_RESOLVE_GROUP_SIZE (DOF_TILES_SIZE * 2)
175
176/* Ambient Occlusion. */
177#define AMBIENT_OCCLUSION_PASS_TILE_SIZE 16
178
179/* IrradianceBake. */
180#define SURFEL_GROUP_SIZE 256
181#define SURFEL_LIST_GROUP_SIZE 256
182#define IRRADIANCE_GRID_GROUP_SIZE 4 /* In each dimension, so 4x4x4 workgroup size. */
183#define IRRADIANCE_GRID_BRICK_SIZE 4 /* In each dimension, so 4x4x4 brick size. */
184#define IRRADIANCE_BOUNDS_GROUP_SIZE 64
185
186/* Volumes. */
187#define VOLUME_GROUP_SIZE 4
188#define VOLUME_INTEGRATION_GROUP_SIZE 8
189#define VOLUME_HIT_DEPTH_MAX 16
190
191/* Velocity. */
192#define VERTEX_COPY_GROUP_SIZE 64
193
194/* Utility Texture. */
195#define UTIL_TEX_SIZE 64
196#define UTIL_BTDF_LAYER_COUNT 16
197/* Scale and bias to avoid interpolation of the border pixel.
198 * Remap UVs to the border pixels centers. */
199#define UTIL_TEX_UV_SCALE ((UTIL_TEX_SIZE - 1.0f) / UTIL_TEX_SIZE)
200#define UTIL_TEX_UV_BIAS (0.5f / UTIL_TEX_SIZE)
201
202#define UTIL_BLUE_NOISE_LAYER 0
203#define UTIL_SSS_TRANSMITTANCE_PROFILE_LAYER 1
204#define UTIL_LTC_MAT_LAYER 2
205#define UTIL_BSDF_LAYER 3
206#define UTIL_BTDF_LAYER 4
207#define UTIL_DISK_INTEGRAL_LAYER UTIL_SSS_TRANSMITTANCE_PROFILE_LAYER
208#define UTIL_DISK_INTEGRAL_COMP 3
209
210/* Could be somewhere else. */
211#ifdef GPU_SHADER
212# if defined(GPU_FRAGMENT_SHADER)
213# define UTIL_TEXEL float2(gl_FragCoord.xy)
214# elif defined(GPU_COMPUTE_SHADER)
215# define UTIL_TEXEL float2(gl_GlobalInvocationID.xy)
216# elif defined(GPU_VERTEX_SHADER)
217# define UTIL_TEXEL float2(gl_VertexID, 0)
218# elif defined(GPU_LIBRARY_SHADER)
219# define UTIL_TEXEL float2(0)
220# endif
221#endif
222
223/* Resource bindings. */
224
225/* Textures. */
227/* Used anywhere. (Starts at index 2, since 0 and 1 are used by draw_gpencil) */
228#define RBUFS_UTILITY_TEX_SLOT 2
229#define HIZ_TEX_SLOT 3
230/* Only during surface shading (forward and deferred eval). */
231#define SHADOW_TILEMAPS_TEX_SLOT 4
232#define SHADOW_ATLAS_TEX_SLOT 5
233#define VOLUME_PROBE_TEX_SLOT 6
234#define SPHERE_PROBE_TEX_SLOT 7
235#define VOLUME_SCATTERING_TEX_SLOT 8
236#define VOLUME_TRANSMITTANCE_TEX_SLOT 9
237/* Currently only used by ray-tracing, but might become used by forward too. */
238#define PLANAR_PROBE_DEPTH_TEX_SLOT 10
239#define PLANAR_PROBE_RADIANCE_TEX_SLOT 11
240/* Reserved slots info */
241#define MATERIAL_TEXTURE_RESERVED_SLOT_FIRST RBUFS_UTILITY_TEX_SLOT
242#define MATERIAL_TEXTURE_RESERVED_SLOT_LAST_NO_EVAL HIZ_TEX_SLOT
243#define MATERIAL_TEXTURE_RESERVED_SLOT_LAST_HYBRID SPHERE_PROBE_TEX_SLOT
244#define MATERIAL_TEXTURE_RESERVED_SLOT_LAST_FORWARD VOLUME_TRANSMITTANCE_TEX_SLOT
245#define MATERIAL_TEXTURE_RESERVED_SLOT_LAST_WORLD SPHERE_PROBE_TEX_SLOT
246
247/* Images. */
248#define RBUFS_COLOR_SLOT 0
249#define RBUFS_VALUE_SLOT 1
250#define RBUFS_CRYPTOMATTE_SLOT 2
251#define GBUF_CLOSURE_SLOT 3
252#define GBUF_NORMAL_SLOT 4
253#define GBUF_HEADER_SLOT 5
254/* Volume properties pass do not write to `rbufs`. Reuse the same bind points. */
255#define VOLUME_PROP_SCATTERING_IMG_SLOT 0
256#define VOLUME_PROP_EXTINCTION_IMG_SLOT 1
257#define VOLUME_PROP_EMISSION_IMG_SLOT 2
258#define VOLUME_PROP_PHASE_IMG_SLOT 3
259#define VOLUME_PROP_PHASE_WEIGHT_IMG_SLOT 4
260#define VOLUME_OCCUPANCY_SLOT 5
261/* Only during volume pre-pass. */
262#define VOLUME_HIT_DEPTH_SLOT 0
263#define VOLUME_HIT_COUNT_SLOT 1
264/* Only during shadow rendering. */
265#define SHADOW_ATLAS_IMG_SLOT 4
266
267/* Uniform Buffers. */
268/* Slot 0 is GPU_NODE_TREE_UBO_SLOT. */
269#define UNIFORM_BUF_SLOT 1
270/* Only during surface shading (forward and deferred eval). */
271#define IRRADIANCE_GRID_BUF_SLOT 2
272#define SPHERE_PROBE_BUF_SLOT 3
273#define PLANAR_PROBE_BUF_SLOT 4
274/* Only during pre-pass. */
275#define VELOCITY_CAMERA_PREV_BUF 2
276#define VELOCITY_CAMERA_CURR_BUF 3
277#define VELOCITY_CAMERA_NEXT_BUF 4
278#define CLIP_PLANE_BUF 5
279
280/* Storage Buffers. */
281#define LIGHT_CULL_BUF_SLOT 0
282#define LIGHT_BUF_SLOT 1
283#define LIGHT_ZBIN_BUF_SLOT 2
284#define LIGHT_TILE_BUF_SLOT 3
285#define IRRADIANCE_BRICK_BUF_SLOT 4
286#define SAMPLING_BUF_SLOT 6
287#define CRYPTOMATTE_BUF_SLOT 7
288/* Only during surface capture. */
289#define SURFEL_BUF_SLOT 4
290/* Only during surface capture. */
291#define CAPTURE_BUF_SLOT 5
292/* Only during shadow rendering. */
293#define SHADOW_RENDER_MAP_BUF_SLOT 3
294#define SHADOW_PAGE_INFO_SLOT 4
295#define SHADOW_RENDER_VIEW_BUF_SLOT 5
296
297/* Only during pre-pass. */
298#define VELOCITY_OBJ_PREV_BUF_SLOT 0
299#define VELOCITY_OBJ_NEXT_BUF_SLOT 1
300#define VELOCITY_GEO_PREV_BUF_SLOT 2
301#define VELOCITY_GEO_NEXT_BUF_SLOT 3
302#define VELOCITY_INDIRECTION_BUF_SLOT 4
303
304#define CLOSURE_WEIGHT_CUTOFF 1e-5f
305/* Treat closure as singular if the roughness is below this threshold. */
306#define BSDF_ROUGHNESS_THRESHOLD 2e-2
307
308/* Cannot use math libraries in shared headers yet. */
309#define EEVEE_PI 3.14159265358979323846 /* pi */