Blender  V3.3
workbench_prepass_info.hh
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
4 
5 /* -------------------------------------------------------------------- */
9 GPU_SHADER_CREATE_INFO(workbench_mesh)
10  .vertex_in(0, Type::VEC3, "pos")
11  .vertex_in(1, Type::VEC3, "nor")
12  .vertex_in(2, Type::VEC4, "ac")
13  .vertex_in(3, Type::VEC2, "au")
14  .vertex_source("workbench_prepass_vert.glsl")
15  .additional_info("draw_mesh")
16  .additional_info("draw_resource_handle");
17 
18 GPU_SHADER_CREATE_INFO(workbench_hair)
19  .sampler(0, ImageType::FLOAT_BUFFER, "ac", Frequency::BATCH)
20  .sampler(1, ImageType::FLOAT_BUFFER, "au", Frequency::BATCH)
21  .vertex_source("workbench_prepass_hair_vert.glsl")
22  .additional_info("draw_hair")
23  .additional_info("draw_resource_handle");
24 
25 GPU_SHADER_CREATE_INFO(workbench_pointcloud)
26  .vertex_source("workbench_prepass_pointcloud_vert.glsl")
27  .additional_info("draw_pointcloud")
28  .additional_info("draw_resource_handle");
29 
32 /* -------------------------------------------------------------------- */
36 GPU_SHADER_CREATE_INFO(workbench_texture_none).define("TEXTURE_NONE");
37 
38 GPU_SHADER_CREATE_INFO(workbench_texture_single)
39  .sampler(2, ImageType::FLOAT_2D, "imageTexture", Frequency::BATCH)
40  .push_constant(Type::BOOL, "imagePremult")
41  .push_constant(Type::FLOAT, "imageTransparencyCutoff")
42  .define("V3D_SHADING_TEXTURE_COLOR");
43 
44 GPU_SHADER_CREATE_INFO(workbench_texture_tile)
45  .sampler(2, ImageType::FLOAT_2D_ARRAY, "imageTileArray", Frequency::BATCH)
46  .sampler(3, ImageType::FLOAT_1D_ARRAY, "imageTileData", Frequency::BATCH)
47  .push_constant(Type::BOOL, "imagePremult")
48  .push_constant(Type::FLOAT, "imageTransparencyCutoff")
49  .define("V3D_SHADING_TEXTURE_COLOR")
50  .define("TEXTURE_IMAGE_ARRAY");
51 
54 /* -------------------------------------------------------------------- */
58 GPU_SHADER_CREATE_INFO(workbench_lighting_flat).define("V3D_LIGHTING_FLAT");
59 GPU_SHADER_CREATE_INFO(workbench_lighting_studio).define("V3D_LIGHTING_STUDIO");
60 GPU_SHADER_CREATE_INFO(workbench_lighting_matcap)
61  .define("V3D_LIGHTING_MATCAP")
62  .sampler(4, ImageType::FLOAT_2D, "matcap_diffuse_tx", Frequency::PASS)
63  .sampler(5, ImageType::FLOAT_2D, "matcap_specular_tx", Frequency::PASS);
64 
67 /* -------------------------------------------------------------------- */
71 GPU_SHADER_INTERFACE_INFO(workbench_material_iface, "")
72  .smooth(Type::VEC3, "normal_interp")
73  .smooth(Type::VEC3, "color_interp")
74  .smooth(Type::FLOAT, "alpha_interp")
75  .smooth(Type::VEC2, "uv_interp")
76  .flat(Type::INT, "object_id")
77  .flat(Type::FLOAT, "_roughness")
78  .flat(Type::FLOAT, "metallic");
79 
80 GPU_SHADER_CREATE_INFO(workbench_material)
81  .uniform_buf(4, "WorldData", "world_data", Frequency::PASS)
82  .uniform_buf(5, "vec4", "materials_data[4096]", Frequency::PASS)
83  .push_constant(Type::INT, "materialIndex")
84  .push_constant(Type::BOOL, "useMatcap")
85  .vertex_out(workbench_material_iface);
86 
89 /* -------------------------------------------------------------------- */
93 GPU_SHADER_CREATE_INFO(workbench_transparent_accum)
94  /* NOTE: Blending will be skipped on objectId because output is a
95  * non-normalized integer buffer. */
96  .fragment_out(0, Type::VEC4, "transparentAccum")
97  .fragment_out(1, Type::VEC4, "revealageAccum")
98  .fragment_out(2, Type::UINT, "objectId")
99  .push_constant(Type::BOOL, "forceShadowing")
100  .typedef_source("workbench_shader_shared.h")
101  .fragment_source("workbench_transparent_accum_frag.glsl");
102 
103 GPU_SHADER_CREATE_INFO(workbench_opaque)
104  .fragment_out(0, Type::VEC4, "materialData")
105  .fragment_out(1, Type::VEC2, "normalData")
106  .fragment_out(2, Type::UINT, "objectId")
107  .typedef_source("workbench_shader_shared.h")
108  .fragment_source("workbench_prepass_frag.glsl");
109 
112 /* -------------------------------------------------------------------- */
116 #define WORKBENCH_FINAL_VARIATION(name, ...) \
117  GPU_SHADER_CREATE_INFO(name).additional_info(__VA_ARGS__).do_static_compilation(true);
118 
119 #define WORKBENCH_CLIPPING_VARIATIONS(prefix, ...) \
120  WORKBENCH_FINAL_VARIATION(prefix##_clip, "drw_clipped", __VA_ARGS__) \
121  WORKBENCH_FINAL_VARIATION(prefix##_no_clip, __VA_ARGS__)
122 
123 #define WORKBENCH_TEXTURE_VARIATIONS(prefix, ...) \
124  WORKBENCH_CLIPPING_VARIATIONS(prefix##_tex_none, "workbench_texture_none", __VA_ARGS__) \
125  WORKBENCH_CLIPPING_VARIATIONS(prefix##_tex_single, "workbench_texture_single", __VA_ARGS__) \
126  WORKBENCH_CLIPPING_VARIATIONS(prefix##_tex_tile, "workbench_texture_tile", __VA_ARGS__)
127 
128 #define WORKBENCH_DATATYPE_VARIATIONS(prefix, ...) \
129  WORKBENCH_TEXTURE_VARIATIONS(prefix##_mesh, "workbench_mesh", __VA_ARGS__) \
130  WORKBENCH_TEXTURE_VARIATIONS(prefix##_hair, "workbench_hair", __VA_ARGS__) \
131  WORKBENCH_TEXTURE_VARIATIONS(prefix##_ptcloud, "workbench_pointcloud", __VA_ARGS__)
132 
133 #define WORKBENCH_PIPELINE_VARIATIONS(prefix, ...) \
134  WORKBENCH_DATATYPE_VARIATIONS(prefix##_transp_studio, \
135  "workbench_transparent_accum", \
136  "workbench_lighting_studio", \
137  __VA_ARGS__) \
138  WORKBENCH_DATATYPE_VARIATIONS(prefix##_transp_matcap, \
139  "workbench_transparent_accum", \
140  "workbench_lighting_matcap", \
141  __VA_ARGS__) \
142  WORKBENCH_DATATYPE_VARIATIONS(prefix##_transp_flat, \
143  "workbench_transparent_accum", \
144  "workbench_lighting_flat", \
145  __VA_ARGS__) \
146  WORKBENCH_DATATYPE_VARIATIONS(prefix##_opaque, "workbench_opaque", __VA_ARGS__)
147 
148 WORKBENCH_PIPELINE_VARIATIONS(workbench, "workbench_material");
149 
typedef UINT(API *GHOST_WIN32_GetDpiForWindow)(HWND)
#define GPU_SHADER_INTERFACE_INFO(_interface, _inst_name)
@ FLOAT
#define WORKBENCH_PIPELINE_VARIATIONS(prefix,...)
GPU_SHADER_CREATE_INFO(workbench_texture_none).define("TEXTURE_NONE")