Blender V4.5
subdiv_info.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2025 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#ifdef GPU_SHADER
6# pragma once
7# include "gpu_glsl_cpp_stubs.hh"
8
10#endif
11
13
15
16GPU_SHADER_CREATE_INFO(subdiv_base)
18TYPEDEF_SOURCE("draw_subdiv_shader_shared.hh")
21
22GPU_SHADER_CREATE_INFO(subdiv_polygon_offset_base)
23DEFINE("SUBDIV_POLYGON_OFFSET")
24STORAGE_BUF(SUBDIV_FACE_OFFSET_BUF_SLOT, read, uint, subdiv_face_offset[])
25ADDITIONAL_INFO(subdiv_base)
27
28/* -------------------------------------------------------------------- */
31
32#ifdef __APPLE__
33# define SUBDIV_PATCH_EVALUATION_BASIS_DEFINES() DEFINE("OSD_PATCH_BASIS_METAL")
34#else
35# define SUBDIV_PATCH_EVALUATION_BASIS_DEFINES() DEFINE("OSD_PATCH_BASIS_GLSL")
36#endif
37
38#define SUBDIV_PATCH_EVALUATION_BASIS() \
39 SUBDIV_PATCH_EVALUATION_BASIS_DEFINES() \
40 DEFINE("OPENSUBDIV_GLSL_COMPUTE_USE_1ST_DERIVATIVES") \
41 TYPEDEF_SOURCE("osd_patch_basis.glsl") \
42 COMPUTE_SOURCE("subdiv_patch_evaluation_comp.glsl") \
43 STORAGE_BUF(PATCH_EVALUATION_SOURCE_VERTEX_BUFFER_BUF_SLOT, read, float, srcVertexBuffer[]) \
44 STORAGE_BUF( \
45 PATCH_EVALUATION_INPUT_PATCH_HANDLES_BUF_SLOT, read, PatchHandle, input_patch_handles[]) \
46 STORAGE_BUF(PATCH_EVALUATION_QUAD_NODES_BUF_SLOT, read, QuadNode, quad_nodes[]) \
47 STORAGE_BUF(PATCH_EVALUATION_PATCH_COORDS_BUF_SLOT, read, BlenderPatchCoord, patch_coords[]) \
48 STORAGE_BUF( \
49 PATCH_EVALUATION_INPUT_VERTEX_ORIG_INDEX_BUF_SLOT, read, int, input_vert_origindex[]) \
50 STORAGE_BUF( \
51 PATCH_EVALUATION_PATCH_ARRAY_BUFFER_BUF_SLOT, read, OsdPatchArray, patchArrayBuffer[]) \
52 STORAGE_BUF(PATCH_EVALUATION_PATCH_INDEX_BUFFER_BUF_SLOT, read, int, patchIndexBuffer[]) \
53 STORAGE_BUF( \
54 PATCH_EVALUATION_PATCH_PARAM_BUFFER_BUF_SLOT, read, OsdPatchParam, patchParamBuffer[]) \
55 ADDITIONAL_INFO(subdiv_base)
56
57#define SUBDIV_PATCH_EVALUATION_FDOTS() \
58 SUBDIV_PATCH_EVALUATION_BASIS() \
59 DEFINE("FDOTS_EVALUATION") \
60 STORAGE_BUF( \
61 PATCH_EVALUATION_OUTPUT_FDOTS_VERTEX_BUFFER_BUF_SLOT, write, FDotVert, output_verts[]) \
62 STORAGE_BUF(PATCH_EVALUATION_OUTPUT_INDICES_BUF_SLOT, write, uint, output_indices[]) \
63 STORAGE_BUF( \
64 PATCH_EVALUATION_EXTRA_COARSE_FACE_DATA_BUF_SLOT, read, uint, extra_coarse_face_data[])
65
66#define SUBDIV_PATCH_EVALUATION_VERTS() \
67 SUBDIV_PATCH_EVALUATION_BASIS() \
68 DEFINE("VERTS_EVALUATION") \
69 STORAGE_BUF(PATCH_EVALUATION_FLAGS_BUFFER_BUF_SLOT, read, int, flags_buffer[]) \
70 STORAGE_BUF(PATCH_EVALUATION_OUTPUT_VERTS_BUF_SLOT, write, PosNorLoop, output_verts[])
71
72GPU_SHADER_CREATE_INFO(subdiv_patch_evaluation_fvar)
75DEFINE("FVAR_EVALUATION")
78
79GPU_SHADER_CREATE_INFO(subdiv_patch_evaluation_fdots)
83
84GPU_SHADER_CREATE_INFO(subdiv_patch_evaluation_fdots_normals)
87DEFINE("FDOTS_NORMALS")
90
91GPU_SHADER_CREATE_INFO(subdiv_patch_evaluation_verts)
95
96GPU_SHADER_CREATE_INFO(subdiv_patch_evaluation_verts_orcos)
99DEFINE("ORCO_EVALUATION")
101 read,
102 float,
103 srcExtraVertexBuffer[])
106
108
109/* -------------------------------------------------------------------- */
112
113GPU_SHADER_CREATE_INFO(subdiv_loop_normals)
119COMPUTE_SOURCE("subdiv_vbo_lnor_comp.glsl")
120ADDITIONAL_INFO(subdiv_polygon_offset_base)
122
124
125/* -------------------------------------------------------------------- */
128
129GPU_SHADER_CREATE_INFO(subdiv_tris_single_material)
131DEFINE("SINGLE_MATERIAL")
133STORAGE_BUF(TRIS_OUTPUT_TRIS_BUF_SLOT, write, uint, output_tris[])
134COMPUTE_SOURCE("subdiv_ibo_tris_comp.glsl")
135ADDITIONAL_INFO(subdiv_polygon_offset_base)
137
138GPU_SHADER_CREATE_INFO(subdiv_tris_multiple_materials)
141STORAGE_BUF(TRIS_OUTPUT_TRIS_BUF_SLOT, write, uint, output_tris[])
142STORAGE_BUF(TRIS_FACE_MAT_OFFSET, read, uint, face_mat_offset[])
143COMPUTE_SOURCE("subdiv_ibo_tris_comp.glsl")
144ADDITIONAL_INFO(subdiv_polygon_offset_base)
146
148
149/* -------------------------------------------------------------------- */
152
153GPU_SHADER_CREATE_INFO(subdiv_lines)
155STORAGE_BUF(LINES_INPUT_EDGE_DRAW_FLAG_BUF_SLOT, read, int, input_edge_draw_flag[])
157STORAGE_BUF(LINES_OUTPUT_LINES_BUF_SLOT, write, uint, output_lines[])
158COMPUTE_SOURCE("subdiv_ibo_lines_comp.glsl")
159ADDITIONAL_INFO(subdiv_polygon_offset_base)
161
162GPU_SHADER_CREATE_INFO(subdiv_lines_loose)
164DEFINE("LINES_LOOSE")
165STORAGE_BUF(LINES_OUTPUT_LINES_BUF_SLOT, write, uint, output_lines[])
166STORAGE_BUF(LINES_LINES_LOOSE_FLAGS, read, uint, lines_loose_flags[])
167COMPUTE_SOURCE("subdiv_ibo_lines_comp.glsl")
168ADDITIONAL_INFO(subdiv_base)
170
172
173/* -------------------------------------------------------------------- */
176
177GPU_SHADER_CREATE_INFO(subdiv_edge_fac)
178ADDITIONAL_INFO(subdiv_base)
181STORAGE_BUF(EDGE_FAC_EDGE_DRAW_FLAG_BUF_SLOT, read, uint, input_edge_draw_flag[])
182STORAGE_BUF(EDGE_FAC_POLY_OTHER_MAP_BUF_SLOT, read, int, input_poly_other_map[])
183STORAGE_BUF(EDGE_FAC_EDGE_FAC_BUF_SLOT, write, float, output_edge_fac[])
184COMPUTE_SOURCE("subdiv_vbo_edge_fac_comp.glsl")
186
188
189/* -------------------------------------------------------------------- */
192
193#define SUBDIV_CUSTOM_DATA_VARIANT(suffix, gpu_comp_type, data_type, dimension) \
194 GPU_SHADER_CREATE_INFO(subdiv_custom_data_interp_##suffix) \
195 DO_STATIC_COMPILATION() \
196 DEFINE(gpu_comp_type) \
197 DEFINE(dimension) \
198 COMPUTE_SOURCE("subdiv_custom_data_interp_comp.glsl") \
199 STORAGE_BUF(CUSTOM_DATA_FACE_PTEX_OFFSET_BUF_SLOT, read, uint, face_ptex_offset[]) \
200 STORAGE_BUF(CUSTOM_DATA_PATCH_COORDS_BUF_SLOT, read, BlenderPatchCoord, patch_coords[]) \
201 STORAGE_BUF(CUSTOM_DATA_EXTRA_COARSE_FACE_DATA_BUF_SLOT, read, uint, extra_coarse_face_data[]) \
202 STORAGE_BUF(CUSTOM_DATA_SOURCE_DATA_BUF_SLOT, read, data_type, src_data[]) \
203 STORAGE_BUF(CUSTOM_DATA_DESTINATION_DATA_BUF_SLOT, write, data_type, dst_data[]) \
204 ADDITIONAL_INFO(subdiv_polygon_offset_base) \
205 GPU_SHADER_CREATE_END()
206
207SUBDIV_CUSTOM_DATA_VARIANT(4d_u16, "GPU_COMP_U16", uint, "DIMENSIONS_4")
208SUBDIV_CUSTOM_DATA_VARIANT(1d_i32, "GPU_COMP_I32", int, "DIMENSIONS_1")
209SUBDIV_CUSTOM_DATA_VARIANT(2d_i32, "GPU_COMP_I32", int, "DIMENSIONS_2")
210SUBDIV_CUSTOM_DATA_VARIANT(3d_i32, "GPU_COMP_I32", int, "DIMENSIONS_3")
211SUBDIV_CUSTOM_DATA_VARIANT(4d_i32, "GPU_COMP_I32", int, "DIMENSIONS_4")
212SUBDIV_CUSTOM_DATA_VARIANT(1d_f32, "GPU_COMP_F32", float, "DIMENSIONS_1")
213SUBDIV_CUSTOM_DATA_VARIANT(2d_f32, "GPU_COMP_F32", float, "DIMENSIONS_2")
214SUBDIV_CUSTOM_DATA_VARIANT(3d_f32, "GPU_COMP_F32", float, "DIMENSIONS_3")
215SUBDIV_CUSTOM_DATA_VARIANT(4d_f32, "GPU_COMP_F32", float, "DIMENSIONS_4")
216
217#undef SUBDIV_CUSTOM_DATA_VARIANT
218
220
221/* -------------------------------------------------------------------- */
224
225GPU_SHADER_CREATE_INFO(subdiv_sculpt_data)
230COMPUTE_SOURCE("subdiv_vbo_sculpt_data_comp.glsl")
231ADDITIONAL_INFO(subdiv_base)
233
235
236/* -------------------------------------------------------------------- */
239
240GPU_SHADER_CREATE_INFO(subdiv_edituv_stretch_angle)
245COMPUTE_SOURCE("subdiv_vbo_edituv_strech_angle_comp.glsl")
246ADDITIONAL_INFO(subdiv_base)
248
249GPU_SHADER_CREATE_INFO(subdiv_edituv_stretch_area)
251STORAGE_BUF(STRETCH_AREA_COARSE_STRETCH_AREA_BUF_SLOT, read, float, coarse_stretch_area[])
252STORAGE_BUF(STRETCH_AREA_SUBDIV_STRETCH_AREA_BUF_SLOT, write, float, subdiv_stretch_area[])
253COMPUTE_SOURCE("subdiv_vbo_edituv_strech_area_comp.glsl")
254ADDITIONAL_INFO(subdiv_polygon_offset_base)
256
258
259/* -------------------------------------------------------------------- */
262
263GPU_SHADER_CREATE_INFO(subdiv_normals_accumulate)
269 face_adjacency_offsets[])
273COMPUTE_SOURCE("subdiv_normals_accumulate_comp.glsl")
274ADDITIONAL_INFO(subdiv_base)
276
277GPU_SHADER_CREATE_INFO(subdiv_normals_finalize)
282COMPUTE_SOURCE("subdiv_normals_finalize_comp.glsl")
283ADDITIONAL_INFO(subdiv_base)
285
286/* Meshes can have (custom) split normals as loop attribute. */
287GPU_SHADER_CREATE_INFO(subdiv_custom_normals_finalize)
289DEFINE("CUSTOM_NORMALS")
292COMPUTE_SOURCE("subdiv_normals_finalize_comp.glsl")
293ADDITIONAL_INFO(subdiv_base)
295
unsigned int uint
#define LOOP_NORMALS_INPUT_VERT_ORIG_INDEX_BUF_SLOT
#define EDGE_FAC_EDGE_FAC_BUF_SLOT
#define LINES_EXTRA_COARSE_FACE_DATA_BUF_SLOT
#define TRIS_OUTPUT_TRIS_BUF_SLOT
#define PATCH_EVALUATION_OUTPUT_NORMALS_BUF_SLOT
#define LOOP_NORMALS_POS_NOR_BUF_SLOT
#define LOOP_NORMALS_OUTPUT_LNOR_BUF_SLOT
#define LINES_OUTPUT_LINES_BUF_SLOT
#define NORMALS_ACCUMULATE_POS_NOR_BUF_SLOT
#define NORMALS_FINALIZE_VERTEX_LOOP_MAP_BUF_SLOT
#define SCULPT_DATA_SCULPT_DATA_BUF_SLOT
#define SHADER_DATA_BUF_SLOT
#define PATCH_EVALUATION_SOURCE_EXTRA_VERTEX_BUFFER_BUF_SLOT
#define STRETCH_ANGLE_UV_STRETCHES_BUF_SLOT
#define NORMALS_ACCUMULATE_FACE_ADJACENCY_LISTS_BUF_SLOT
#define LINES_LINES_LOOSE_FLAGS
#define EDGE_FAC_POLY_OTHER_MAP_BUF_SLOT
#define SUBDIV_GROUP_SIZE
#define LINES_INPUT_EDGE_DRAW_FLAG_BUF_SLOT
#define TRIS_EXTRA_COARSE_FACE_DATA_BUF_SLOT
#define NORMALS_ACCUMULATE_NORMALS_BUF_SLOT
#define PATCH_EVALUATION_OUTPUT_ORCOS_BUF_SLOT
#define SCULPT_DATA_SCULPT_FACE_SET_COLOR_BUF_SLOT
#define EDGE_FAC_POS_NOR_BUF_SLOT
#define LOOP_NORMALS_EXTRA_COARSE_FACE_DATA_BUF_SLOT
#define SCULPT_DATA_SCULPT_MASK_BUF_SLOT
#define EDGE_FAC_EDGE_DRAW_FLAG_BUF_SLOT
#define TRIS_FACE_MAT_OFFSET
#define STRETCH_AREA_COARSE_STRETCH_AREA_BUF_SLOT
#define NORMALS_FINALIZE_POS_NOR_BUF_SLOT
#define PATCH_EVALUATION_OUTPUT_FVAR_BUF_SLOT
#define SUBDIV_FACE_OFFSET_BUF_SLOT
#define NORMALS_FINALIZE_CUSTOM_NORMALS_BUF_SLOT
#define NORMALS_ACCUMULATE_VERTEX_LOOP_MAP_BUF_SLOT
#define STRETCH_AREA_SUBDIV_STRETCH_AREA_BUF_SLOT
#define NORMALS_ACCUMULATE_FACE_ADJACENCY_OFFSETS_BUF_SLOT
#define NORMALS_FINALIZE_VERTEX_NORMALS_BUF_SLOT
#define STRETCH_ANGLE_POS_NOR_BUF_SLOT
#define STRETCH_ANGLE_UVS_BUF_SLOT
static float normals[][3]
float2 packed_float2
VecBase< float, 4 > float4
#define TYPEDEF_SOURCE(filename)
#define UNIFORM_BUF(slot, type_name, name)
#define ADDITIONAL_INFO(info_name)
#define DEFINE(name)
#define STORAGE_BUF(slot, qualifiers, type_name, name)
#define GPU_SHADER_CREATE_INFO(_info)
#define LOCAL_GROUP_SIZE(...)
#define GPU_SHADER_CREATE_END()
#define COMPUTE_SOURCE(filename)
#define DO_STATIC_COMPILATION()
#define SUBDIV_PATCH_EVALUATION_BASIS()
read
#define SUBDIV_PATCH_EVALUATION_FDOTS()
#define SUBDIV_PATCH_EVALUATION_VERTS()
#define SUBDIV_CUSTOM_DATA_VARIANT(suffix, gpu_comp_type, data_type, dimension)