Blender V5.0
workbench_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
9
10# include "gpu_shader_compat.hh"
11
13# include "draw_view_infos.hh"
15
17# define DYNAMIC_PASS_SELECTION
18# define SHADOW_PASS
19# define SHADOW_FAIL
20# define DOUBLE_MANIFOLD
21#endif
22
23#include "draw_defines.hh"
24
26
27/* -------------------------------------------------------------------- */
30
31GPU_SHADER_CREATE_INFO(workbench_shadow_common)
32STORAGE_BUF_FREQ(3, read, float, pos[], GEOMETRY)
33/* WORKAROUND: Needed to support OpenSubdiv vertex format. Should be removed. */
34PUSH_CONSTANT(int2, gpu_attr_3)
35UNIFORM_BUF(1, ShadowPassData, pass_data)
36TYPEDEF_SOURCE("workbench_shader_shared.hh")
37ADDITIONAL_INFO(gpu_index_buffer_load)
38ADDITIONAL_INFO(draw_view)
39ADDITIONAL_INFO(draw_modelmat)
41
42GPU_SHADER_CREATE_INFO(workbench_shadow_visibility_compute_common)
44DEFINE_VALUE("DRW_VIEW_LEN", "64")
45STORAGE_BUF(0, read, ObjectBounds, bounds_buf[])
46UNIFORM_BUF(2, ExtrudedFrustum, extruded_frustum)
47PUSH_CONSTANT(int, resource_len)
48PUSH_CONSTANT(int, view_len)
49PUSH_CONSTANT(int, visibility_word_per_draw)
50PUSH_CONSTANT(bool, force_fail_method)
51PUSH_CONSTANT(float3, shadow_direction)
52TYPEDEF_SOURCE("workbench_shader_shared.hh")
53COMPUTE_SOURCE("workbench_shadow_visibility_comp.glsl")
54ADDITIONAL_INFO(draw_view)
55ADDITIONAL_INFO(draw_view_culling)
57
58GPU_SHADER_CREATE_INFO(workbench_shadow_visibility_compute_dynamic_pass_type)
59ADDITIONAL_INFO(workbench_shadow_visibility_compute_common)
60DEFINE("DYNAMIC_PASS_SELECTION")
61STORAGE_BUF(1, read_write, uint, pass_visibility_buf[])
62STORAGE_BUF(2, read_write, uint, fail_visibility_buf[])
65
66GPU_SHADER_CREATE_INFO(workbench_shadow_visibility_compute_static_pass_type)
67ADDITIONAL_INFO(workbench_shadow_visibility_compute_common)
68STORAGE_BUF(1, read_write, uint, visibility_buf[])
71
73
74/* -------------------------------------------------------------------- */
77
78GPU_SHADER_CREATE_INFO(workbench_shadow_no_debug)
79FRAGMENT_SOURCE("gpu_shader_depth_only_frag.glsl")
81
82GPU_SHADER_CREATE_INFO(workbench_shadow_debug)
83FRAGMENT_OUT(0, float4, out_debug_color)
84FRAGMENT_SOURCE("workbench_shadow_debug_frag.glsl")
86
88
89/* -------------------------------------------------------------------- */
92
93#define WORKBENCH_SHADOW_VARIATIONS(common, prefix, suffix, ...) \
94 GPU_SHADER_CREATE_INFO(prefix##_pass_manifold_no_caps##suffix) \
95 DEFINE("SHADOW_PASS") \
96 VERTEX_SOURCE("workbench_shadow_vert.glsl") \
97 ADDITIONAL_INFO_EXPAND(common, __VA_ARGS__) \
98 DO_STATIC_COMPILATION() \
99 GPU_SHADER_CREATE_END() \
100\
101 GPU_SHADER_CREATE_INFO(prefix##_pass_no_manifold_no_caps##suffix) \
102 DEFINE("SHADOW_PASS") \
103 DEFINE("DOUBLE_MANIFOLD") \
104 VERTEX_SOURCE("workbench_shadow_vert.glsl") \
105 ADDITIONAL_INFO_EXPAND(common, __VA_ARGS__) \
106 DO_STATIC_COMPILATION() \
107 GPU_SHADER_CREATE_END() \
108\
109 GPU_SHADER_CREATE_INFO(prefix##_fail_manifold_caps##suffix) \
110 DEFINE("SHADOW_FAIL") \
111 VERTEX_SOURCE("workbench_shadow_caps_vert.glsl") \
112 ADDITIONAL_INFO_EXPAND(common, __VA_ARGS__) \
113 DO_STATIC_COMPILATION() \
114 GPU_SHADER_CREATE_END() \
115\
116 GPU_SHADER_CREATE_INFO(prefix##_fail_manifold_no_caps##suffix) \
117 DEFINE("SHADOW_FAIL") \
118 VERTEX_SOURCE("workbench_shadow_vert.glsl") \
119 ADDITIONAL_INFO_EXPAND(common, __VA_ARGS__) \
120 DO_STATIC_COMPILATION() \
121 GPU_SHADER_CREATE_END() \
122\
123 GPU_SHADER_CREATE_INFO(prefix##_fail_no_manifold_caps##suffix) \
124 DEFINE("SHADOW_FAIL") \
125 DEFINE("DOUBLE_MANIFOLD") \
126 VERTEX_SOURCE("workbench_shadow_caps_vert.glsl") \
127 ADDITIONAL_INFO_EXPAND(common, __VA_ARGS__) \
128 DO_STATIC_COMPILATION() \
129 GPU_SHADER_CREATE_END() \
130\
131 GPU_SHADER_CREATE_INFO(prefix##_fail_no_manifold_no_caps##suffix) \
132 DEFINE("SHADOW_FAIL") \
133 DEFINE("DOUBLE_MANIFOLD") \
134 VERTEX_SOURCE("workbench_shadow_vert.glsl") \
135 ADDITIONAL_INFO_EXPAND(common, __VA_ARGS__) \
136 DO_STATIC_COMPILATION() \
137 GPU_SHADER_CREATE_END()
138
139WORKBENCH_SHADOW_VARIATIONS(workbench_shadow_common, workbench_shadow, , workbench_shadow_no_debug)
140
141WORKBENCH_SHADOW_VARIATIONS(workbench_shadow_common,
142 workbench_shadow,
143 _debug,
144 workbench_shadow_debug)
145
146
unsigned int uint
#define DRW_VISIBILITY_GROUP_SIZE
uint pos
#define GPU_SHADER_CREATE_INFO(_info)
#define GPU_SHADER_CREATE_END()
#define TYPEDEF_SOURCE(filename)
#define UNIFORM_BUF(slot, type_name, name)
#define FRAGMENT_SOURCE(filename)
#define STORAGE_BUF_FREQ(slot, qualifiers, type_name, name, freq)
#define ADDITIONAL_INFO(info_name)
#define PUSH_CONSTANT(type, name)
#define DEFINE(name)
#define FRAGMENT_OUT(slot, type, name)
#define STORAGE_BUF(slot, qualifiers, type_name, name)
#define LOCAL_GROUP_SIZE(...)
#define COMPUTE_SOURCE(filename)
#define DO_STATIC_COMPILATION()
#define DEFINE_VALUE(name, value)
#define WORKBENCH_SHADOW_VARIATIONS(common, prefix, suffix,...)