Blender V5.0
workbench_prepass_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
7
9
10# include "gpu_shader_compat.hh"
11
13# include "draw_view_infos.hh"
14
16# define WORKBENCH_COLOR_MATERIAL
17# define WORKBENCH_COLOR_TEXTURE
18# define WORKBENCH_TEXTURE_IMAGE_ARRAY
19# define WORKBENCH_COLOR_MATERIAL
20# define WORKBENCH_COLOR_VERTEX
21# define WORKBENCH_LIGHTING_MATCAP
22
23# define CURVES_SHADER
24# define DRW_HAIR_INFO
25
26# define POINTCLOUD_SHADER
27# define DRW_POINTCLOUD_INFO
28#endif
29
31#include "workbench_defines.hh"
32
33/* -------------------------------------------------------------------- */
36
37GPU_SHADER_CREATE_INFO(workbench_mesh)
40VERTEX_IN(2, float4, ac)
41VERTEX_IN(3, float2, au)
42VERTEX_SOURCE("workbench_prepass_vert.glsl")
43ADDITIONAL_INFO(draw_modelmat_with_custom_id)
45
46GPU_SHADER_CREATE_INFO(workbench_curves)
49PUSH_CONSTANT(int, emitter_object_id)
50VERTEX_SOURCE("workbench_prepass_hair_vert.glsl")
51ADDITIONAL_INFO(draw_modelmat_with_custom_id)
52ADDITIONAL_INFO(draw_curves)
53ADDITIONAL_INFO(draw_curves_infos)
55
56GPU_SHADER_CREATE_INFO(workbench_pointcloud)
57VERTEX_SOURCE("workbench_prepass_pointcloud_vert.glsl")
58ADDITIONAL_INFO(draw_modelmat_with_custom_id)
59ADDITIONAL_INFO(draw_pointcloud)
61
63
64/* -------------------------------------------------------------------- */
67
68GPU_SHADER_CREATE_INFO(workbench_lighting_flat)
69DEFINE("WORKBENCH_LIGHTING_FLAT")
71GPU_SHADER_CREATE_INFO(workbench_lighting_studio)
72DEFINE("WORKBENCH_LIGHTING_STUDIO")
74GPU_SHADER_CREATE_INFO(workbench_lighting_matcap)
75DEFINE("WORKBENCH_LIGHTING_MATCAP")
78
80
81/* -------------------------------------------------------------------- */
84
85GPU_SHADER_INTERFACE_INFO(workbench_material_iface)
86SMOOTH(float3, normal_interp)
87SMOOTH(float3, color_interp)
88SMOOTH(float, alpha_interp)
89SMOOTH(float2, uv_interp)
90FLAT(int, object_id)
91FLAT(float, _roughness)
92FLAT(float, metallic)
94
95GPU_SHADER_CREATE_INFO(workbench_color_material)
96DEFINE("WORKBENCH_COLOR_MATERIAL")
97STORAGE_BUF(WB_MATERIAL_SLOT, read, float4, materials_data[])
99
100GPU_SHADER_CREATE_INFO(workbench_color_texture)
101DEFINE("WORKBENCH_COLOR_TEXTURE")
102DEFINE("WORKBENCH_TEXTURE_IMAGE_ARRAY")
103DEFINE("WORKBENCH_COLOR_MATERIAL")
104STORAGE_BUF(WB_MATERIAL_SLOT, read, float4, materials_data[])
105SAMPLER_FREQ(WB_TEXTURE_SLOT, sampler2D, imageTexture, BATCH)
106SAMPLER_FREQ(WB_TILE_ARRAY_SLOT, sampler2DArray, imageTileArray, BATCH)
107SAMPLER_FREQ(WB_TILE_DATA_SLOT, sampler1DArray, imageTileData, BATCH)
108PUSH_CONSTANT(bool, is_image_tile)
109PUSH_CONSTANT(bool, image_premult)
110PUSH_CONSTANT(float, image_transparency_cutoff)
112
113GPU_SHADER_CREATE_INFO(workbench_color_vertex)
114DEFINE("WORKBENCH_COLOR_VERTEX")
116
117GPU_SHADER_CREATE_INFO(workbench_prepass)
119VERTEX_OUT(workbench_material_iface)
120ADDITIONAL_INFO(draw_view)
122
124
125/* -------------------------------------------------------------------- */
128
129GPU_SHADER_CREATE_INFO(workbench_transparent_accum)
130/* NOTE: Blending will be skipped on objectId because output is a
131 * non-normalized integer buffer. */
132FRAGMENT_OUT(0, float4, out_transparent_accum)
133FRAGMENT_OUT(1, float4, out_revealage_accum)
134FRAGMENT_OUT(2, uint, out_object_id)
135PUSH_CONSTANT(bool, force_shadowing)
136TYPEDEF_SOURCE("workbench_shader_shared.hh")
137FRAGMENT_SOURCE("workbench_transparent_accum_frag.glsl")
139
140GPU_SHADER_CREATE_INFO(workbench_opaque)
141FRAGMENT_OUT(0, float4, out_material)
142FRAGMENT_OUT(1, float2, out_normal)
143FRAGMENT_OUT(2, uint, out_object_id)
144TYPEDEF_SOURCE("workbench_shader_shared.hh")
145FRAGMENT_SOURCE("workbench_prepass_frag.glsl")
147
149
150/* -------------------------------------------------------------------- */
153
154GPU_SHADER_CREATE_INFO(workbench_flat)
155DEFINE("WORKBENCH_SHADING_FLAT")
157GPU_SHADER_CREATE_INFO(workbench_studio)
158DEFINE("WORKBENCH_SHADING_STUDIO")
160GPU_SHADER_CREATE_INFO(workbench_matcap)
161DEFINE("WORKBENCH_SHADING_MATCAP")
163
164#define WORKBENCH_CLIPPING_VARIATIONS(prefix, ...) \
165 CREATE_INFO_VARIANT(prefix##_clip, drw_clipped, __VA_ARGS__) \
166 CREATE_INFO_VARIANT(prefix##_no_clip, __VA_ARGS__)
167
168#define WORKBENCH_COLOR_VARIATIONS(prefix, ...) \
169 WORKBENCH_CLIPPING_VARIATIONS(prefix##_material, workbench_color_material, __VA_ARGS__) \
170 WORKBENCH_CLIPPING_VARIATIONS(prefix##_texture, workbench_color_texture, __VA_ARGS__) \
171 WORKBENCH_CLIPPING_VARIATIONS(prefix##_vertex, workbench_color_vertex, __VA_ARGS__)
172
173#define WORKBENCH_SHADING_VARIATIONS(prefix, ...) \
174 WORKBENCH_COLOR_VARIATIONS(prefix##_flat, workbench_lighting_flat, __VA_ARGS__) \
175 WORKBENCH_COLOR_VARIATIONS(prefix##_studio, workbench_lighting_studio, __VA_ARGS__) \
176 WORKBENCH_COLOR_VARIATIONS(prefix##_matcap, workbench_lighting_matcap, __VA_ARGS__)
177
178#define WORKBENCH_PIPELINE_VARIATIONS(prefix, ...) \
179 WORKBENCH_SHADING_VARIATIONS(prefix##_transparent, workbench_transparent_accum, __VA_ARGS__) \
180 WORKBENCH_SHADING_VARIATIONS(prefix##_opaque, workbench_opaque, __VA_ARGS__)
181
182#define WORKBENCH_GEOMETRY_VARIATIONS(prefix, ...) \
183 WORKBENCH_PIPELINE_VARIATIONS(prefix##_mesh, workbench_mesh, __VA_ARGS__) \
184 WORKBENCH_PIPELINE_VARIATIONS(prefix##_curves, workbench_curves, __VA_ARGS__) \
185 WORKBENCH_PIPELINE_VARIATIONS(prefix##_ptcloud, workbench_pointcloud, __VA_ARGS__)
186
187WORKBENCH_GEOMETRY_VARIATIONS(workbench_prepass, workbench_prepass)
188
189#undef WORKBENCH_FINAL_VARIATION
190#undef WORKBENCH_CLIPPING_VARIATIONS
191#undef WORKBENCH_TEXTURE_VARIATIONS
192#undef WORKBENCH_DATATYPE_VARIATIONS
193#undef WORKBENCH_PIPELINE_VARIATIONS
194
unsigned int uint
uint pos
uint nor
#define GPU_SHADER_INTERFACE_END()
#define GPU_SHADER_INTERFACE_INFO(_interface)
#define GPU_SHADER_CREATE_INFO(_info)
#define GPU_SHADER_CREATE_END()
#define TYPEDEF_SOURCE(filename)
#define VERTEX_OUT(stage_interface)
#define SMOOTH(type, name)
#define SAMPLER(slot, type, name)
#define UNIFORM_BUF(slot, type_name, name)
#define FRAGMENT_SOURCE(filename)
#define ADDITIONAL_INFO(info_name)
#define PUSH_CONSTANT(type, name)
#define DEFINE(name)
#define FLAT(type, name)
#define FRAGMENT_OUT(slot, type, name)
#define SAMPLER_FREQ(slot, type, name, freq)
#define STORAGE_BUF(slot, qualifiers, type_name, name)
#define VERTEX_SOURCE(filename)
#define VERTEX_IN(slot, type, name)
SamplerBase< float, 1, false, true > sampler1DArray
SamplerBase< float, 1 > samplerBuffer
SamplerBase< float, 2, false, true > sampler2DArray
SamplerBase< float, 2 > sampler2D
#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,...)