Blender V4.3
workbench_composite_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
7
8/* -------------------------------------------------------------------- */
12GPU_SHADER_CREATE_INFO(workbench_composite)
13 .sampler(3, ImageType::DEPTH_2D, "depth_tx")
14 .sampler(4, ImageType::FLOAT_2D, "normal_tx")
15 .sampler(5, ImageType::FLOAT_2D, "material_tx")
16 .uniform_buf(WB_WORLD_SLOT, "WorldData", "world_data")
17 .typedef_source("workbench_shader_shared.h")
18 .push_constant(Type::BOOL, "forceShadowing")
19 .fragment_out(0, Type::VEC4, "fragColor")
20 .fragment_source("workbench_composite_frag.glsl")
21 .additional_info("draw_fullscreen", "draw_view");
22
23/* Lighting */
24
25GPU_SHADER_CREATE_INFO(workbench_resolve_opaque_studio).define("WORKBENCH_LIGHTING_STUDIO");
26
27GPU_SHADER_CREATE_INFO(workbench_resolve_opaque_matcap)
28 .define("WORKBENCH_LIGHTING_MATCAP")
29 .sampler(WB_MATCAP_SLOT, ImageType::FLOAT_2D_ARRAY, "matcap_tx");
30
31GPU_SHADER_CREATE_INFO(workbench_resolve_opaque_flat).define("WORKBENCH_LIGHTING_FLAT");
32
33/* Effects */
34
35GPU_SHADER_CREATE_INFO(workbench_resolve_curvature)
36 .define("WORKBENCH_CURVATURE")
37 .sampler(6, ImageType::UINT_2D, "object_id_tx");
38
39GPU_SHADER_CREATE_INFO(workbench_resolve_cavity)
40 .define("WORKBENCH_CAVITY")
41 /* TODO(@pragma37): GPU_SAMPLER_EXTEND_MODE_REPEAT is set in CavityEffect,
42 * it doesn't work here? */
43 .sampler(7, ImageType::FLOAT_2D, "jitter_tx")
44 .uniform_buf(5, "vec4", "cavity_samples[512]");
45
46GPU_SHADER_CREATE_INFO(workbench_resolve_shadow)
47 .define("WORKBENCH_SHADOW")
48 .sampler(8, ImageType::UINT_2D, "stencil_tx");
49
50/* Variations */
51
52#define WORKBENCH_FINAL_VARIATION(name, ...) \
53 GPU_SHADER_CREATE_INFO(name).additional_info(__VA_ARGS__).do_static_compilation(true);
54
55#define WORKBENCH_RESOLVE_SHADOW_VARIATION(prefix, ...) \
56 WORKBENCH_FINAL_VARIATION(prefix##_shadow, "workbench_resolve_shadow", __VA_ARGS__) \
57 WORKBENCH_FINAL_VARIATION(prefix##_no_shadow, __VA_ARGS__)
58
59#define WORKBENCH_CURVATURE_VARIATIONS(prefix, ...) \
60 WORKBENCH_RESOLVE_SHADOW_VARIATION( \
61 prefix##_curvature, "workbench_resolve_curvature", __VA_ARGS__) \
62 WORKBENCH_RESOLVE_SHADOW_VARIATION(prefix##_no_curvature, __VA_ARGS__)
63
64#define WORKBENCH_CAVITY_VARIATIONS(prefix, ...) \
65 WORKBENCH_CURVATURE_VARIATIONS(prefix##_cavity, "workbench_resolve_cavity", __VA_ARGS__) \
66 WORKBENCH_CURVATURE_VARIATIONS(prefix##_no_cavity, __VA_ARGS__)
67
68#define WORKBENCH_LIGHTING_VARIATIONS(prefix, ...) \
69 WORKBENCH_CAVITY_VARIATIONS( \
70 prefix##_opaque_studio, "workbench_resolve_opaque_studio", __VA_ARGS__) \
71 WORKBENCH_CAVITY_VARIATIONS( \
72 prefix##_opaque_matcap, "workbench_resolve_opaque_matcap", __VA_ARGS__) \
73 WORKBENCH_CAVITY_VARIATIONS(prefix##_opaque_flat, "workbench_resolve_opaque_flat", __VA_ARGS__)
74
75WORKBENCH_LIGHTING_VARIATIONS(workbench_resolve, "workbench_composite");
76
77#undef WORKBENCH_FINAL_VARIATION
78#undef WORKBENCH_CURVATURE_VARIATIONS
79#undef WORKBENCH_CAVITY_VARIATIONS
80#undef WORKBENCH_LIGHTING_VARIATIONS
81
#define GPU_SHADER_CREATE_INFO(_info)
#define WORKBENCH_LIGHTING_VARIATIONS(prefix,...)
#define WB_MATCAP_SLOT
#define WB_WORLD_SLOT