Blender V4.3
workbench_prepass_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_mesh)
13 .vertex_in(0, Type::VEC3, "pos")
14 .vertex_in(1, Type::VEC3, "nor")
15 .vertex_in(2, Type::VEC4, "ac")
16 .vertex_in(3, Type::VEC2, "au")
17 .vertex_source("workbench_prepass_vert.glsl")
18 .additional_info("draw_modelmat_new_with_custom_id", "draw_resource_handle_new");
19
20GPU_SHADER_CREATE_INFO(workbench_curves)
21 .sampler(WB_CURVES_COLOR_SLOT, ImageType::FLOAT_BUFFER, "ac", Frequency::BATCH)
22 .sampler(WB_CURVES_UV_SLOT, ImageType::FLOAT_BUFFER, "au", Frequency::BATCH)
23 .push_constant(Type::INT, "emitter_object_id")
24 .vertex_source("workbench_prepass_hair_vert.glsl")
25 .additional_info("draw_modelmat_new_with_custom_id",
26 "draw_resource_handle_new",
27 "draw_hair_new");
28
29GPU_SHADER_CREATE_INFO(workbench_pointcloud)
30 .vertex_source("workbench_prepass_pointcloud_vert.glsl")
31 .additional_info("draw_modelmat_new_with_custom_id",
32 "draw_resource_handle_new",
33 "draw_pointcloud_new");
34
37/* -------------------------------------------------------------------- */
41GPU_SHADER_CREATE_INFO(workbench_lighting_flat).define("WORKBENCH_LIGHTING_FLAT");
42GPU_SHADER_CREATE_INFO(workbench_lighting_studio).define("WORKBENCH_LIGHTING_STUDIO");
43GPU_SHADER_CREATE_INFO(workbench_lighting_matcap)
44 .define("WORKBENCH_LIGHTING_MATCAP")
45 .sampler(WB_MATCAP_SLOT, ImageType::FLOAT_2D_ARRAY, "matcap_tx");
46
49/* -------------------------------------------------------------------- */
53GPU_SHADER_INTERFACE_INFO(workbench_material_iface, "")
54 .smooth(Type::VEC3, "normal_interp")
55 .smooth(Type::VEC3, "color_interp")
56 .smooth(Type::FLOAT, "alpha_interp")
57 .smooth(Type::VEC2, "uv_interp")
58 .flat(Type::INT, "object_id")
59 .flat(Type::FLOAT, "_roughness")
60 .flat(Type::FLOAT, "metallic");
61
62GPU_SHADER_CREATE_INFO(workbench_color_material)
63 .define("WORKBENCH_COLOR_MATERIAL")
64 .storage_buf(WB_MATERIAL_SLOT, Qualifier::READ, "vec4", "materials_data[]");
65
66GPU_SHADER_CREATE_INFO(workbench_color_texture)
67 .define("WORKBENCH_COLOR_TEXTURE")
68 .define("WORKBENCH_TEXTURE_IMAGE_ARRAY")
69 .define("WORKBENCH_COLOR_MATERIAL")
70 .storage_buf(WB_MATERIAL_SLOT, Qualifier::READ, "vec4", "materials_data[]")
71 .sampler(WB_TEXTURE_SLOT, ImageType::FLOAT_2D, "imageTexture", Frequency::BATCH)
72 .sampler(WB_TILE_ARRAY_SLOT, ImageType::FLOAT_2D_ARRAY, "imageTileArray", Frequency::BATCH)
73 .sampler(WB_TILE_DATA_SLOT, ImageType::FLOAT_1D_ARRAY, "imageTileData", Frequency::BATCH)
74 .push_constant(Type::BOOL, "isImageTile")
75 .push_constant(Type::BOOL, "imagePremult")
76 .push_constant(Type::FLOAT, "imageTransparencyCutoff");
77
78GPU_SHADER_CREATE_INFO(workbench_color_vertex).define("WORKBENCH_COLOR_VERTEX");
79
80GPU_SHADER_CREATE_INFO(workbench_prepass)
81 .define("WORKBENCH_NEXT")
82 .uniform_buf(WB_WORLD_SLOT, "WorldData", "world_data")
83 .vertex_out(workbench_material_iface)
84 .additional_info("draw_view");
85
88/* -------------------------------------------------------------------- */
92GPU_SHADER_CREATE_INFO(workbench_transparent_accum)
93 /* NOTE: Blending will be skipped on objectId because output is a
94 * non-normalized integer buffer. */
95 .fragment_out(0, Type::VEC4, "out_transparent_accum")
96 .fragment_out(1, Type::VEC4, "out_revealage_accum")
97 .fragment_out(2, Type::UINT, "out_object_id")
98 .push_constant(Type::BOOL, "forceShadowing")
99 .typedef_source("workbench_shader_shared.h")
100 .fragment_source("workbench_transparent_accum_frag.glsl");
101
102GPU_SHADER_CREATE_INFO(workbench_opaque)
103 .fragment_out(0, Type::VEC4, "out_material")
104 .fragment_out(1, Type::VEC2, "out_normal")
105 .fragment_out(2, Type::UINT, "out_object_id")
106 .typedef_source("workbench_shader_shared.h")
107 .fragment_source("workbench_prepass_frag.glsl");
108
111/* -------------------------------------------------------------------- */
115GPU_SHADER_CREATE_INFO(workbench_flat).define("WORKBENCH_SHADING_FLAT");
116GPU_SHADER_CREATE_INFO(workbench_studio).define("WORKBENCH_SHADING_STUDIO");
117GPU_SHADER_CREATE_INFO(workbench_matcap).define("WORKBENCH_SHADING_MATCAP");
118
119#define WORKBENCH_FINAL_VARIATION(name, ...) \
120 GPU_SHADER_CREATE_INFO(name).additional_info(__VA_ARGS__).do_static_compilation(true);
121
122#define WORKBENCH_CLIPPING_VARIATIONS(prefix, ...) \
123 WORKBENCH_FINAL_VARIATION(prefix##_clip, "drw_clipped", __VA_ARGS__) \
124 WORKBENCH_FINAL_VARIATION(prefix##_no_clip, __VA_ARGS__)
125
126#define WORKBENCH_COLOR_VARIATIONS(prefix, ...) \
127 WORKBENCH_CLIPPING_VARIATIONS(prefix##_material, "workbench_color_material", __VA_ARGS__) \
128 WORKBENCH_CLIPPING_VARIATIONS(prefix##_texture, "workbench_color_texture", __VA_ARGS__) \
129 WORKBENCH_CLIPPING_VARIATIONS(prefix##_vertex, "workbench_color_vertex", __VA_ARGS__)
130
131#define WORKBENCH_SHADING_VARIATIONS(prefix, ...) \
132 WORKBENCH_COLOR_VARIATIONS(prefix##_flat, "workbench_lighting_flat", __VA_ARGS__) \
133 WORKBENCH_COLOR_VARIATIONS(prefix##_studio, "workbench_lighting_studio", __VA_ARGS__) \
134 WORKBENCH_COLOR_VARIATIONS(prefix##_matcap, "workbench_lighting_matcap", __VA_ARGS__)
135
136#define WORKBENCH_PIPELINE_VARIATIONS(prefix, ...) \
137 WORKBENCH_SHADING_VARIATIONS(prefix##_transparent, "workbench_transparent_accum", __VA_ARGS__) \
138 WORKBENCH_SHADING_VARIATIONS(prefix##_opaque, "workbench_opaque", __VA_ARGS__)
139
140#define WORKBENCH_GEOMETRY_VARIATIONS(prefix, ...) \
141 WORKBENCH_PIPELINE_VARIATIONS(prefix##_mesh, "workbench_mesh", __VA_ARGS__) \
142 WORKBENCH_PIPELINE_VARIATIONS(prefix##_curves, "workbench_curves", __VA_ARGS__) \
143 WORKBENCH_PIPELINE_VARIATIONS(prefix##_ptcloud, "workbench_pointcloud", __VA_ARGS__)
144
145WORKBENCH_GEOMETRY_VARIATIONS(workbench_prepass, "workbench_prepass");
146
147#undef WORKBENCH_FINAL_VARIATION
148#undef WORKBENCH_CLIPPING_VARIATIONS
149#undef WORKBENCH_TEXTURE_VARIATIONS
150#undef WORKBENCH_DATATYPE_VARIATIONS
151#undef WORKBENCH_PIPELINE_VARIATIONS
152
#define GPU_SHADER_INTERFACE_INFO(_interface, _inst_name)
#define GPU_SHADER_CREATE_INFO(_info)
#define WB_TEXTURE_SLOT
#define WB_MATCAP_SLOT
#define WB_TILE_DATA_SLOT
#define WB_CURVES_COLOR_SLOT
#define WB_MATERIAL_SLOT
#define WB_WORLD_SLOT
#define WB_CURVES_UV_SLOT
#define WB_TILE_ARRAY_SLOT
#define WORKBENCH_GEOMETRY_VARIATIONS(prefix,...)