Blender V5.0
workbench_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
8
9# include "gpu_shader_compat.hh"
10
12
14# define VOLUME_SMOKE
15# define VOLUME_OBJECT
16# define USE_COBA
17# define USE_TRILINEAR
18# define USE_TRICUBIC
19# define USE_CLOSEST
20# define VOLUME_SLICE
21#endif
22
24
25/* -------------------------------------------------------------------- */
28
29GPU_SHADER_CREATE_INFO(workbench_volume_common)
31FRAGMENT_OUT(0, float4, frag_color)
32SAMPLER(0, sampler2DDepth, depth_buffer)
33SAMPLER(1, sampler3D, density_tx)
34PUSH_CONSTANT(int, samples_len)
35PUSH_CONSTANT(float, noise_ofs)
36PUSH_CONSTANT(float, step_length)
37PUSH_CONSTANT(float, density_fac)
38PUSH_CONSTANT(bool, do_depth_test)
39VERTEX_SOURCE("workbench_volume_vert.glsl")
40FRAGMENT_SOURCE("workbench_volume_frag.glsl")
42
43GPU_SHADER_CREATE_INFO(workbench_volume)
44SAMPLER(6, usampler2D, stencil_tx)
45ADDITIONAL_INFO(workbench_volume_common)
46ADDITIONAL_INFO(draw_object_infos)
47ADDITIONAL_INFO(draw_view)
50
51/* -------------------------------------------------------------------- */
54
55GPU_SHADER_CREATE_INFO(workbench_volume_smoke_common)
56DEFINE("VOLUME_SMOKE")
57SAMPLER(2, sampler3D, flame_tx)
58SAMPLER(3, sampler1D, flame_color_tx)
59ADDITIONAL_INFO(draw_resource_id_varying)
61
62GPU_SHADER_CREATE_INFO(workbench_volume_object_common)
63DEFINE("VOLUME_OBJECT")
64PUSH_CONSTANT(float4x4, volume_texture_to_object)
65/* FIXME(fclem): This overflow the push_constant limit. */
66PUSH_CONSTANT(float4x4, volume_object_to_texture)
67ADDITIONAL_INFO(draw_resource_id_varying)
69
70GPU_SHADER_CREATE_INFO(workbench_volume_smoke)
71ADDITIONAL_INFO(workbench_volume_smoke_common)
72ADDITIONAL_INFO(draw_modelmat)
74
75GPU_SHADER_CREATE_INFO(workbench_volume_object)
76ADDITIONAL_INFO(workbench_volume_object_common)
77ADDITIONAL_INFO(draw_volume)
79
81
82/* -------------------------------------------------------------------- */
85
86GPU_SHADER_CREATE_INFO(workbench_volume_coba)
87DEFINE("USE_COBA")
88SAMPLER(4, usampler3D, flag_tx)
89SAMPLER(5, sampler1D, transfer_tx)
90PUSH_CONSTANT(bool, show_phi)
91PUSH_CONSTANT(bool, show_flags)
92PUSH_CONSTANT(bool, show_pressure)
93PUSH_CONSTANT(float, grid_scale)
95
96GPU_SHADER_CREATE_INFO(workbench_volume_no_coba)
97SAMPLER(4, sampler3D, shadow_tx)
98PUSH_CONSTANT(float3, active_color)
100
102
103/* -------------------------------------------------------------------- */
106
107GPU_SHADER_CREATE_INFO(workbench_volume_linear)
108DEFINE("USE_TRILINEAR")
110GPU_SHADER_CREATE_INFO(workbench_volume_cubic)
111DEFINE("USE_TRICUBIC")
113GPU_SHADER_CREATE_INFO(workbench_volume_closest)
114DEFINE("USE_CLOSEST")
116
118
119/* -------------------------------------------------------------------- */
122
123GPU_SHADER_INTERFACE_INFO(workbench_volume_iface)
124SMOOTH(float3, local_position)
126
127GPU_SHADER_CREATE_INFO(workbench_volume_slice)
128DEFINE("VOLUME_SLICE")
129VERTEX_IN(1, float3, uvs)
130VERTEX_OUT(workbench_volume_iface)
131PUSH_CONSTANT(int, slice_axis) /* -1 is no slice. */
132PUSH_CONSTANT(float, slice_position)
134
136
137/* -------------------------------------------------------------------- */
140
141#define WORKBENCH_VOLUME_SLICE_VARIATIONS(prefix, ...) \
142 CREATE_INFO_VARIANT(prefix##_slice, workbench_volume_slice, __VA_ARGS__) \
143 CREATE_INFO_VARIANT(prefix##_no_slice, __VA_ARGS__)
144
145#define WORKBENCH_VOLUME_COBA_VARIATIONS(prefix, ...) \
146 WORKBENCH_VOLUME_SLICE_VARIATIONS(prefix##_coba, workbench_volume_coba, __VA_ARGS__) \
147 WORKBENCH_VOLUME_SLICE_VARIATIONS(prefix##_no_coba, workbench_volume_no_coba, __VA_ARGS__)
148
149#define WORKBENCH_VOLUME_INTERP_VARIATIONS(prefix, ...) \
150 WORKBENCH_VOLUME_COBA_VARIATIONS(prefix##_linear, workbench_volume_linear, __VA_ARGS__) \
151 WORKBENCH_VOLUME_COBA_VARIATIONS(prefix##_cubic, workbench_volume_cubic, __VA_ARGS__) \
152 WORKBENCH_VOLUME_COBA_VARIATIONS(prefix##_closest, workbench_volume_closest, __VA_ARGS__)
153
154#define WORKBENCH_VOLUME_SMOKE_VARIATIONS(prefix, ...) \
155 WORKBENCH_VOLUME_INTERP_VARIATIONS(prefix##_smoke, workbench_volume_smoke, __VA_ARGS__) \
156 WORKBENCH_VOLUME_INTERP_VARIATIONS(prefix##_object, workbench_volume_object, __VA_ARGS__)
157
158WORKBENCH_VOLUME_SMOKE_VARIATIONS(workbench_volume, workbench_volume)
159
160
uint pos
#define GPU_SHADER_INTERFACE_END()
#define GPU_SHADER_INTERFACE_INFO(_interface)
#define GPU_SHADER_CREATE_INFO(_info)
#define GPU_SHADER_CREATE_END()
#define VERTEX_OUT(stage_interface)
#define SMOOTH(type, name)
#define SAMPLER(slot, type, name)
#define FRAGMENT_SOURCE(filename)
#define ADDITIONAL_INFO(info_name)
#define PUSH_CONSTANT(type, name)
#define DEFINE(name)
#define FRAGMENT_OUT(slot, type, name)
#define VERTEX_SOURCE(filename)
#define VERTEX_IN(slot, type, name)
MatBase< 4, 4 > float4x4
SamplerBase< float, 1 > sampler1D
SamplerBase< float, 3 > sampler3D
SamplerBase< float, 2, false, false, false, true > sampler2DDepth
SamplerBase< uint, 3 > usampler3D
SamplerBase< uint, 2 > usampler2D
#define WORKBENCH_VOLUME_SMOKE_VARIATIONS(prefix,...)