Blender V4.5
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
5#ifdef GPU_SHADER
6# pragma once
7
9
10# include "gpu_glsl_cpp_stubs.hh"
11
13# include "draw_view_info.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 HAIR_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_hair)
54
55GPU_SHADER_CREATE_INFO(workbench_pointcloud)
56VERTEX_SOURCE("workbench_prepass_pointcloud_vert.glsl")
57ADDITIONAL_INFO(draw_modelmat_with_custom_id)
58ADDITIONAL_INFO(draw_pointcloud)
60
62
63/* -------------------------------------------------------------------- */
66
67GPU_SHADER_CREATE_INFO(workbench_lighting_flat)
68DEFINE("WORKBENCH_LIGHTING_FLAT")
70GPU_SHADER_CREATE_INFO(workbench_lighting_studio)
71DEFINE("WORKBENCH_LIGHTING_STUDIO")
73GPU_SHADER_CREATE_INFO(workbench_lighting_matcap)
74DEFINE("WORKBENCH_LIGHTING_MATCAP")
77
79
80/* -------------------------------------------------------------------- */
83
84GPU_SHADER_INTERFACE_INFO(workbench_material_iface)
85SMOOTH(float3, normal_interp)
86SMOOTH(float3, color_interp)
87SMOOTH(float, alpha_interp)
88SMOOTH(float2, uv_interp)
89FLAT(int, object_id)
90FLAT(float, _roughness)
91FLAT(float, metallic)
93
94GPU_SHADER_CREATE_INFO(workbench_color_material)
95DEFINE("WORKBENCH_COLOR_MATERIAL")
96STORAGE_BUF(WB_MATERIAL_SLOT, read, float4, materials_data[])
98
99GPU_SHADER_CREATE_INFO(workbench_color_texture)
100DEFINE("WORKBENCH_COLOR_TEXTURE")
101DEFINE("WORKBENCH_TEXTURE_IMAGE_ARRAY")
102DEFINE("WORKBENCH_COLOR_MATERIAL")
103STORAGE_BUF(WB_MATERIAL_SLOT, read, float4, materials_data[])
104SAMPLER_FREQ(WB_TEXTURE_SLOT, sampler2D, imageTexture, BATCH)
105SAMPLER_FREQ(WB_TILE_ARRAY_SLOT, sampler2DArray, imageTileArray, BATCH)
106SAMPLER_FREQ(WB_TILE_DATA_SLOT, sampler1DArray, imageTileData, BATCH)
107PUSH_CONSTANT(bool, is_image_tile)
108PUSH_CONSTANT(bool, image_premult)
109PUSH_CONSTANT(float, image_transparency_cutoff)
111
112GPU_SHADER_CREATE_INFO(workbench_color_vertex)
113DEFINE("WORKBENCH_COLOR_VERTEX")
115
116GPU_SHADER_CREATE_INFO(workbench_prepass)
118VERTEX_OUT(workbench_material_iface)
119ADDITIONAL_INFO(draw_view)
121
123
124/* -------------------------------------------------------------------- */
127
128GPU_SHADER_CREATE_INFO(workbench_transparent_accum)
129/* NOTE: Blending will be skipped on objectId because output is a
130 * non-normalized integer buffer. */
131FRAGMENT_OUT(0, float4, out_transparent_accum)
132FRAGMENT_OUT(1, float4, out_revealage_accum)
133FRAGMENT_OUT(2, uint, out_object_id)
134PUSH_CONSTANT(bool, force_shadowing)
135TYPEDEF_SOURCE("workbench_shader_shared.hh")
136FRAGMENT_SOURCE("workbench_transparent_accum_frag.glsl")
138
139GPU_SHADER_CREATE_INFO(workbench_opaque)
140FRAGMENT_OUT(0, float4, out_material)
141FRAGMENT_OUT(1, float2, out_normal)
142FRAGMENT_OUT(2, uint, out_object_id)
143TYPEDEF_SOURCE("workbench_shader_shared.hh")
144FRAGMENT_SOURCE("workbench_prepass_frag.glsl")
146
148
149/* -------------------------------------------------------------------- */
152
153GPU_SHADER_CREATE_INFO(workbench_flat)
154DEFINE("WORKBENCH_SHADING_FLAT")
156GPU_SHADER_CREATE_INFO(workbench_studio)
157DEFINE("WORKBENCH_SHADING_STUDIO")
159GPU_SHADER_CREATE_INFO(workbench_matcap)
160DEFINE("WORKBENCH_SHADING_MATCAP")
162
163#define WORKBENCH_CLIPPING_VARIATIONS(prefix, ...) \
164 CREATE_INFO_VARIANT(prefix##_clip, drw_clipped, __VA_ARGS__) \
165 CREATE_INFO_VARIANT(prefix##_no_clip, __VA_ARGS__)
166
167#define WORKBENCH_COLOR_VARIATIONS(prefix, ...) \
168 WORKBENCH_CLIPPING_VARIATIONS(prefix##_material, workbench_color_material, __VA_ARGS__) \
169 WORKBENCH_CLIPPING_VARIATIONS(prefix##_texture, workbench_color_texture, __VA_ARGS__) \
170 WORKBENCH_CLIPPING_VARIATIONS(prefix##_vertex, workbench_color_vertex, __VA_ARGS__)
171
172#define WORKBENCH_SHADING_VARIATIONS(prefix, ...) \
173 WORKBENCH_COLOR_VARIATIONS(prefix##_flat, workbench_lighting_flat, __VA_ARGS__) \
174 WORKBENCH_COLOR_VARIATIONS(prefix##_studio, workbench_lighting_studio, __VA_ARGS__) \
175 WORKBENCH_COLOR_VARIATIONS(prefix##_matcap, workbench_lighting_matcap, __VA_ARGS__)
176
177#define WORKBENCH_PIPELINE_VARIATIONS(prefix, ...) \
178 WORKBENCH_SHADING_VARIATIONS(prefix##_transparent, workbench_transparent_accum, __VA_ARGS__) \
179 WORKBENCH_SHADING_VARIATIONS(prefix##_opaque, workbench_opaque, __VA_ARGS__)
180
181#define WORKBENCH_GEOMETRY_VARIATIONS(prefix, ...) \
182 WORKBENCH_PIPELINE_VARIATIONS(prefix##_mesh, workbench_mesh, __VA_ARGS__) \
183 WORKBENCH_PIPELINE_VARIATIONS(prefix##_curves, workbench_curves, __VA_ARGS__) \
184 WORKBENCH_PIPELINE_VARIATIONS(prefix##_ptcloud, workbench_pointcloud, __VA_ARGS__)
185
186WORKBENCH_GEOMETRY_VARIATIONS(workbench_prepass, workbench_prepass)
187
188#undef WORKBENCH_FINAL_VARIATION
189#undef WORKBENCH_CLIPPING_VARIATIONS
190#undef WORKBENCH_TEXTURE_VARIATIONS
191#undef WORKBENCH_DATATYPE_VARIATIONS
192#undef WORKBENCH_PIPELINE_VARIATIONS
193
unsigned int uint
uint pos
uint nor
SamplerBase< float, 1, false, true > sampler1DArray
SamplerBase< float, 1 > samplerBuffer
VecBase< float, 4 > float4
SamplerBase< float, 2, false, true > sampler2DArray
SamplerBase< float, 2 > sampler2D
#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 GPU_SHADER_INTERFACE_END()
#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 GPU_SHADER_INTERFACE_INFO(_interface)
#define STORAGE_BUF(slot, qualifiers, type_name, name)
#define GPU_SHADER_CREATE_INFO(_info)
#define VERTEX_SOURCE(filename)
#define VERTEX_IN(slot, type, name)
#define GPU_SHADER_CREATE_END()
read
#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,...)