Blender V4.3
workbench_volume_info.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
6
7/* -------------------------------------------------------------------- */
11GPU_SHADER_CREATE_INFO(workbench_volume_common)
12 .vertex_in(0, Type::VEC3, "pos")
13 .fragment_out(0, Type::VEC4, "fragColor")
14 .sampler(0, ImageType::DEPTH_2D, "depthBuffer")
15 .sampler(1, ImageType::FLOAT_3D, "densityTexture")
16 .push_constant(Type::INT, "samplesLen")
17 .push_constant(Type::FLOAT, "noiseOfs")
18 .push_constant(Type::FLOAT, "stepLength")
19 .push_constant(Type::FLOAT, "densityScale")
20 .push_constant(Type::BOOL, "do_depth_test")
21 .vertex_source("workbench_volume_vert.glsl")
22 .fragment_source("workbench_volume_frag.glsl");
23
24GPU_SHADER_CREATE_INFO(workbench_volume)
25 .define("WORKBENCH_NEXT")
26 .sampler(6, ImageType::UINT_2D, "stencil_tx")
27 .additional_info("workbench_volume_common", "draw_object_infos_new", "draw_view");
30/* -------------------------------------------------------------------- */
34GPU_SHADER_CREATE_INFO(workbench_volume_smoke_common)
35 .define("VOLUME_SMOKE")
36 .sampler(2, ImageType::FLOAT_3D, "flameTexture")
37 .sampler(3, ImageType::FLOAT_1D, "flameColorTexture")
38 .additional_info("draw_resource_id_varying");
39
40GPU_SHADER_CREATE_INFO(workbench_volume_object_common)
41 .define("VOLUME_OBJECT")
42 .push_constant(Type::MAT4, "volumeTextureToObject")
43 /* FIXME(fclem): This overflow the push_constant limit. */
44 .push_constant(Type::MAT4, "volumeObjectToTexture")
45 .additional_info("draw_resource_id_varying");
46
47GPU_SHADER_CREATE_INFO(workbench_volume_smoke)
48 .additional_info("workbench_volume_smoke_common", "draw_modelmat_new");
49
50GPU_SHADER_CREATE_INFO(workbench_volume_object)
51 .additional_info("workbench_volume_object_common", "draw_volume_new");
52
55/* -------------------------------------------------------------------- */
59GPU_SHADER_CREATE_INFO(workbench_volume_coba)
60 .define("USE_COBA")
61 .sampler(4, ImageType::UINT_3D, "flagTexture")
62 .sampler(5, ImageType::FLOAT_1D, "transferTexture")
63 .push_constant(Type::BOOL, "showPhi")
64 .push_constant(Type::BOOL, "showFlags")
65 .push_constant(Type::BOOL, "showPressure")
66 .push_constant(Type::FLOAT, "gridScale");
67
68GPU_SHADER_CREATE_INFO(workbench_volume_no_coba)
69 .sampler(4, ImageType::FLOAT_3D, "shadowTexture")
70 .push_constant(Type::VEC3, "activeColor");
71
74/* -------------------------------------------------------------------- */
78GPU_SHADER_CREATE_INFO(workbench_volume_linear).define("USE_TRILINEAR");
79GPU_SHADER_CREATE_INFO(workbench_volume_cubic).define("USE_TRICUBIC");
80GPU_SHADER_CREATE_INFO(workbench_volume_closest).define("USE_CLOSEST");
81
84/* -------------------------------------------------------------------- */
88GPU_SHADER_INTERFACE_INFO(workbench_volume_iface, "").smooth(Type::VEC3, "localPos");
89
90GPU_SHADER_CREATE_INFO(workbench_volume_slice)
91 .define("VOLUME_SLICE")
92 .vertex_in(1, Type::VEC3, "uvs")
93 .vertex_out(workbench_volume_iface)
94 .push_constant(Type::INT, "sliceAxis") /* -1 is no slice. */
95 .push_constant(Type::FLOAT, "slicePosition");
96
99/* -------------------------------------------------------------------- */
103#define WORKBENCH_VOLUME_SLICE_VARIATIONS(prefix, ...) \
104 GPU_SHADER_CREATE_INFO(prefix##_slice) \
105 .additional_info("workbench_volume_slice", __VA_ARGS__) \
106 .do_static_compilation(true); \
107 GPU_SHADER_CREATE_INFO(prefix##_no_slice) \
108 .additional_info(__VA_ARGS__) \
109 .do_static_compilation(true);
110
111#define WORKBENCH_VOLUME_COBA_VARIATIONS(prefix, ...) \
112 WORKBENCH_VOLUME_SLICE_VARIATIONS(prefix##_coba, "workbench_volume_coba", __VA_ARGS__) \
113 WORKBENCH_VOLUME_SLICE_VARIATIONS(prefix##_no_coba, "workbench_volume_no_coba", __VA_ARGS__)
114
115#define WORKBENCH_VOLUME_INTERP_VARIATIONS(prefix, ...) \
116 WORKBENCH_VOLUME_COBA_VARIATIONS(prefix##_linear, "workbench_volume_linear", __VA_ARGS__) \
117 WORKBENCH_VOLUME_COBA_VARIATIONS(prefix##_cubic, "workbench_volume_cubic", __VA_ARGS__) \
118 WORKBENCH_VOLUME_COBA_VARIATIONS(prefix##_closest, "workbench_volume_closest", __VA_ARGS__)
119
120#define WORKBENCH_VOLUME_SMOKE_VARIATIONS(prefix, ...) \
121 WORKBENCH_VOLUME_INTERP_VARIATIONS(prefix##_smoke, "workbench_volume_smoke", __VA_ARGS__) \
122 WORKBENCH_VOLUME_INTERP_VARIATIONS(prefix##_object, "workbench_volume_object", __VA_ARGS__)
123
124WORKBENCH_VOLUME_SMOKE_VARIATIONS(workbench_volume, "workbench_volume")
125
126
#define GPU_SHADER_INTERFACE_INFO(_interface, _inst_name)
#define GPU_SHADER_CREATE_INFO(_info)
#define WORKBENCH_VOLUME_SMOKE_VARIATIONS(prefix,...)