This is the first step of moving the create infos back inside shader sources. All info files are now treated as source files. However, they are not considered in the include tree yet. This will come in another following PR. Each shader source file now generate a `.info` file containing only the create info declarations. This renames all info files so that they do not conflict with their previous versions that were copied (non-generated). Pull Request: https://projects.blender.org/blender/blender/pulls/146676
305 lines
12 KiB
C++
305 lines
12 KiB
C++
/* SPDX-FileCopyrightText: 2025 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#ifdef GPU_SHADER
|
|
# pragma once
|
|
# include "gpu_shader_compat.hh"
|
|
|
|
# include "draw_subdiv_shader_shared.hh"
|
|
#endif
|
|
|
|
#include "gpu_shader_create_info.hh"
|
|
|
|
#include "draw_subdiv_defines.hh"
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_base)
|
|
LOCAL_GROUP_SIZE(SUBDIV_GROUP_SIZE)
|
|
TYPEDEF_SOURCE("draw_subdiv_shader_shared.hh")
|
|
UNIFORM_BUF(SHADER_DATA_BUF_SLOT, DRWSubdivUboStorage, shader_data)
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_polygon_offset_base)
|
|
DEFINE("SUBDIV_POLYGON_OFFSET")
|
|
STORAGE_BUF(SUBDIV_FACE_OFFSET_BUF_SLOT, read, uint, subdiv_face_offset[])
|
|
ADDITIONAL_INFO(subdiv_base)
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/** \name Patch evaluation
|
|
* \{ */
|
|
|
|
#ifdef __APPLE__
|
|
/* Match definition from OPenSubdiv which defines OSD_PATCH_BASIS_METAL as 1. Matching it here
|
|
* avoids possible re-definition warning at runtime. */
|
|
# define SUBDIV_PATCH_EVALUATION_BASIS_DEFINES() DEFINE_VALUE("OSD_PATCH_BASIS_METAL", "1")
|
|
#else
|
|
# define SUBDIV_PATCH_EVALUATION_BASIS_DEFINES() DEFINE("OSD_PATCH_BASIS_GLSL")
|
|
#endif
|
|
|
|
#define SUBDIV_PATCH_EVALUATION_BASIS() \
|
|
SUBDIV_PATCH_EVALUATION_BASIS_DEFINES() \
|
|
DEFINE("OPENSUBDIV_GLSL_COMPUTE_USE_1ST_DERIVATIVES") \
|
|
TYPEDEF_SOURCE("osd_patch_basis.glsl") \
|
|
COMPUTE_SOURCE("subdiv_patch_evaluation_comp.glsl") \
|
|
STORAGE_BUF(PATCH_EVALUATION_SOURCE_VERTEX_BUFFER_BUF_SLOT, read, float, srcVertexBuffer[]) \
|
|
STORAGE_BUF( \
|
|
PATCH_EVALUATION_INPUT_PATCH_HANDLES_BUF_SLOT, read, PatchHandle, input_patch_handles[]) \
|
|
STORAGE_BUF(PATCH_EVALUATION_QUAD_NODES_BUF_SLOT, read, QuadNode, quad_nodes[]) \
|
|
STORAGE_BUF(PATCH_EVALUATION_PATCH_COORDS_BUF_SLOT, read, BlenderPatchCoord, patch_coords[]) \
|
|
STORAGE_BUF( \
|
|
PATCH_EVALUATION_PATCH_ARRAY_BUFFER_BUF_SLOT, read, OsdPatchArray, patchArrayBuffer[]) \
|
|
STORAGE_BUF(PATCH_EVALUATION_PATCH_INDEX_BUFFER_BUF_SLOT, read, int, patchIndexBuffer[]) \
|
|
STORAGE_BUF( \
|
|
PATCH_EVALUATION_PATCH_PARAM_BUFFER_BUF_SLOT, read, OsdPatchParam, patchParamBuffer[]) \
|
|
ADDITIONAL_INFO(subdiv_base)
|
|
|
|
#define SUBDIV_PATCH_EVALUATION_FDOTS() \
|
|
SUBDIV_PATCH_EVALUATION_BASIS() \
|
|
DEFINE("FDOTS_EVALUATION") \
|
|
STORAGE_BUF( \
|
|
PATCH_EVALUATION_OUTPUT_FDOTS_VERTEX_BUFFER_BUF_SLOT, write, FDotVert, output_verts[]) \
|
|
STORAGE_BUF(PATCH_EVALUATION_OUTPUT_INDICES_BUF_SLOT, write, uint, output_indices[]) \
|
|
STORAGE_BUF( \
|
|
PATCH_EVALUATION_EXTRA_COARSE_FACE_DATA_BUF_SLOT, read, uint, extra_coarse_face_data[])
|
|
|
|
#define SUBDIV_PATCH_EVALUATION_VERTS() \
|
|
SUBDIV_PATCH_EVALUATION_BASIS() \
|
|
DEFINE("VERTS_EVALUATION") \
|
|
STORAGE_BUF(PATCH_EVALUATION_OUTPUT_POS_BUF_SLOT, write, Position, positions[])
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_patch_evaluation_fvar)
|
|
DO_STATIC_COMPILATION()
|
|
SUBDIV_PATCH_EVALUATION_BASIS()
|
|
DEFINE("FVAR_EVALUATION")
|
|
STORAGE_BUF(PATCH_EVALUATION_OUTPUT_FVAR_BUF_SLOT, write, packed_float2, output_fvar[])
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_patch_evaluation_fdots)
|
|
DO_STATIC_COMPILATION()
|
|
SUBDIV_PATCH_EVALUATION_FDOTS()
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_patch_evaluation_fdots_normals)
|
|
DO_STATIC_COMPILATION()
|
|
SUBDIV_PATCH_EVALUATION_FDOTS()
|
|
DEFINE("FDOTS_NORMALS")
|
|
STORAGE_BUF(PATCH_EVALUATION_OUTPUT_NORMALS_BUF_SLOT, write, FDotNor, output_nors[])
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_patch_evaluation_verts)
|
|
DO_STATIC_COMPILATION()
|
|
SUBDIV_PATCH_EVALUATION_VERTS()
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_patch_evaluation_verts_orcos)
|
|
DO_STATIC_COMPILATION()
|
|
SUBDIV_PATCH_EVALUATION_VERTS()
|
|
DEFINE("ORCO_EVALUATION")
|
|
STORAGE_BUF(PATCH_EVALUATION_SOURCE_EXTRA_VERTEX_BUFFER_BUF_SLOT,
|
|
read,
|
|
float,
|
|
srcExtraVertexBuffer[])
|
|
STORAGE_BUF(PATCH_EVALUATION_OUTPUT_ORCOS_BUF_SLOT, write, float4, output_orcos[])
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
/** \} */
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/** \name Loop Normals
|
|
* \{ */
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_loop_normals)
|
|
DO_STATIC_COMPILATION()
|
|
STORAGE_BUF(LOOP_NORMALS_POS_SLOT, read, Position, positions[])
|
|
STORAGE_BUF(LOOP_NORMALS_EXTRA_COARSE_FACE_DATA_BUF_SLOT, read, uint, extra_coarse_face_data[])
|
|
STORAGE_BUF(LOOP_NORMALS_VERT_NORMALS_BUF_SLOT, read, Normal, vert_normals[])
|
|
STORAGE_BUF(LOOP_NORMALS_VERTEX_LOOP_MAP_BUF_SLOT, read, uint, vert_loop_map[])
|
|
STORAGE_BUF(LOOP_NORMALS_OUTPUT_LNOR_BUF_SLOT, write, Normal, output_lnor[])
|
|
COMPUTE_SOURCE("subdiv_vbo_lnor_comp.glsl")
|
|
ADDITIONAL_INFO(subdiv_polygon_offset_base)
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
/** \} */
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/** \name Triangle indices
|
|
* \{ */
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_tris_single_material)
|
|
DO_STATIC_COMPILATION()
|
|
DEFINE("SINGLE_MATERIAL")
|
|
STORAGE_BUF(TRIS_EXTRA_COARSE_FACE_DATA_BUF_SLOT, read, uint, extra_coarse_face_data[])
|
|
STORAGE_BUF(TRIS_OUTPUT_TRIS_BUF_SLOT, write, uint, output_tris[])
|
|
COMPUTE_SOURCE("subdiv_ibo_tris_comp.glsl")
|
|
ADDITIONAL_INFO(subdiv_polygon_offset_base)
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_tris_multiple_materials)
|
|
DO_STATIC_COMPILATION()
|
|
STORAGE_BUF(TRIS_EXTRA_COARSE_FACE_DATA_BUF_SLOT, read, uint, extra_coarse_face_data[])
|
|
STORAGE_BUF(TRIS_OUTPUT_TRIS_BUF_SLOT, write, uint, output_tris[])
|
|
STORAGE_BUF(TRIS_FACE_MAT_OFFSET, read, uint, face_mat_offset[])
|
|
COMPUTE_SOURCE("subdiv_ibo_tris_comp.glsl")
|
|
ADDITIONAL_INFO(subdiv_polygon_offset_base)
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
/** \} */
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/** \name Line indices
|
|
* \{ */
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_lines)
|
|
DO_STATIC_COMPILATION()
|
|
STORAGE_BUF(LINES_INPUT_EDGE_DRAW_FLAG_BUF_SLOT, read, int, input_edge_draw_flag[])
|
|
STORAGE_BUF(LINES_EXTRA_COARSE_FACE_DATA_BUF_SLOT, read, uint, extra_coarse_face_data[])
|
|
STORAGE_BUF(LINES_OUTPUT_LINES_BUF_SLOT, write, uint, output_lines[])
|
|
COMPUTE_SOURCE("subdiv_ibo_lines_comp.glsl")
|
|
ADDITIONAL_INFO(subdiv_polygon_offset_base)
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_lines_loose)
|
|
DO_STATIC_COMPILATION()
|
|
DEFINE("LINES_LOOSE")
|
|
STORAGE_BUF(LINES_OUTPUT_LINES_BUF_SLOT, write, uint, output_lines[])
|
|
STORAGE_BUF(LINES_LINES_LOOSE_FLAGS, read, uint, lines_loose_flags[])
|
|
COMPUTE_SOURCE("subdiv_ibo_lines_comp.glsl")
|
|
ADDITIONAL_INFO(subdiv_base)
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
/** \} */
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/** \name Edge data for object mode wireframe
|
|
* \{ */
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_edge_fac)
|
|
ADDITIONAL_INFO(subdiv_base)
|
|
DO_STATIC_COMPILATION()
|
|
STORAGE_BUF(EDGE_FAC_POS_BUF_SLOT, read, Position, positions[])
|
|
STORAGE_BUF(EDGE_FAC_EDGE_DRAW_FLAG_BUF_SLOT, read, uint, input_edge_draw_flag[])
|
|
STORAGE_BUF(EDGE_FAC_POLY_OTHER_MAP_BUF_SLOT, read, int, input_poly_other_map[])
|
|
STORAGE_BUF(EDGE_FAC_EDGE_FAC_BUF_SLOT, write, float, output_edge_fac[])
|
|
COMPUTE_SOURCE("subdiv_vbo_edge_fac_comp.glsl")
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
/** \} */
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/** \name Custom data
|
|
* \{ */
|
|
|
|
#define SUBDIV_CUSTOM_DATA_VARIANT(suffix, gpu_comp_type, data_type, dimension) \
|
|
GPU_SHADER_CREATE_INFO(subdiv_custom_data_interp_##suffix) \
|
|
DO_STATIC_COMPILATION() \
|
|
DEFINE(gpu_comp_type) \
|
|
DEFINE(dimension) \
|
|
COMPUTE_SOURCE("subdiv_custom_data_interp_comp.glsl") \
|
|
STORAGE_BUF(CUSTOM_DATA_FACE_PTEX_OFFSET_BUF_SLOT, read, uint, face_ptex_offset[]) \
|
|
STORAGE_BUF(CUSTOM_DATA_PATCH_COORDS_BUF_SLOT, read, BlenderPatchCoord, patch_coords[]) \
|
|
STORAGE_BUF(CUSTOM_DATA_EXTRA_COARSE_FACE_DATA_BUF_SLOT, read, uint, extra_coarse_face_data[]) \
|
|
STORAGE_BUF(CUSTOM_DATA_SOURCE_DATA_BUF_SLOT, read, data_type, src_data[]) \
|
|
STORAGE_BUF(CUSTOM_DATA_DESTINATION_DATA_BUF_SLOT, write, data_type, dst_data[]) \
|
|
ADDITIONAL_INFO(subdiv_polygon_offset_base)
|
|
|
|
SUBDIV_CUSTOM_DATA_VARIANT(4d_u16, "GPU_COMP_U16", uint, "DIMENSIONS_4")
|
|
GPU_SHADER_CREATE_END()
|
|
SUBDIV_CUSTOM_DATA_VARIANT(1d_i32, "GPU_COMP_I32", int, "DIMENSIONS_1")
|
|
GPU_SHADER_CREATE_END()
|
|
SUBDIV_CUSTOM_DATA_VARIANT(2d_i32, "GPU_COMP_I32", int, "DIMENSIONS_2")
|
|
GPU_SHADER_CREATE_END()
|
|
SUBDIV_CUSTOM_DATA_VARIANT(3d_i32, "GPU_COMP_I32", int, "DIMENSIONS_3")
|
|
GPU_SHADER_CREATE_END()
|
|
SUBDIV_CUSTOM_DATA_VARIANT(4d_i32, "GPU_COMP_I32", int, "DIMENSIONS_4")
|
|
GPU_SHADER_CREATE_END()
|
|
SUBDIV_CUSTOM_DATA_VARIANT(1d_f32, "GPU_COMP_F32", float, "DIMENSIONS_1")
|
|
GPU_SHADER_CREATE_END()
|
|
SUBDIV_CUSTOM_DATA_VARIANT(2d_f32, "GPU_COMP_F32", float, "DIMENSIONS_2")
|
|
GPU_SHADER_CREATE_END()
|
|
SUBDIV_CUSTOM_DATA_VARIANT(3d_f32, "GPU_COMP_F32", float, "DIMENSIONS_3")
|
|
GPU_SHADER_CREATE_END()
|
|
SUBDIV_CUSTOM_DATA_VARIANT(4d_f32, "GPU_COMP_F32", float, "DIMENSIONS_4")
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
SUBDIV_CUSTOM_DATA_VARIANT(3d_f32_normalize, "GPU_COMP_F32", float, "DIMENSIONS_3")
|
|
DEFINE("NORMALIZE")
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
#undef SUBDIV_CUSTOM_DATA_VARIANT
|
|
|
|
/** \} */
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/** \name Sculpt data
|
|
* \{ */
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_sculpt_data)
|
|
DO_STATIC_COMPILATION()
|
|
STORAGE_BUF(SCULPT_DATA_SCULPT_MASK_BUF_SLOT, read, float, sculpt_mask[])
|
|
STORAGE_BUF(SCULPT_DATA_SCULPT_FACE_SET_COLOR_BUF_SLOT, read, uint, sculpt_face_set_color[])
|
|
STORAGE_BUF(SCULPT_DATA_SCULPT_DATA_BUF_SLOT, write, SculptData, sculpt_data[])
|
|
COMPUTE_SOURCE("subdiv_vbo_sculpt_data_comp.glsl")
|
|
ADDITIONAL_INFO(subdiv_base)
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
/** \} */
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/** \name UV Stretch overlays
|
|
* \{ */
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_edituv_stretch_angle)
|
|
DO_STATIC_COMPILATION()
|
|
STORAGE_BUF(STRETCH_ANGLE_POS_BUF_SLOT, read, Position, positions[])
|
|
STORAGE_BUF(STRETCH_ANGLE_UVS_BUF_SLOT, read, packed_float2, uvs[])
|
|
STORAGE_BUF(STRETCH_ANGLE_UV_STRETCHES_BUF_SLOT, write, UVStretchAngle, uv_stretches[])
|
|
COMPUTE_SOURCE("subdiv_vbo_edituv_strech_angle_comp.glsl")
|
|
ADDITIONAL_INFO(subdiv_base)
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_edituv_stretch_area)
|
|
DO_STATIC_COMPILATION()
|
|
STORAGE_BUF(STRETCH_AREA_COARSE_STRETCH_AREA_BUF_SLOT, read, float, coarse_stretch_area[])
|
|
STORAGE_BUF(STRETCH_AREA_SUBDIV_STRETCH_AREA_BUF_SLOT, write, float, subdiv_stretch_area[])
|
|
COMPUTE_SOURCE("subdiv_vbo_edituv_strech_area_comp.glsl")
|
|
ADDITIONAL_INFO(subdiv_polygon_offset_base)
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
/** \} */
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/** \name Normals
|
|
* \{ */
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_normals_accumulate)
|
|
DO_STATIC_COMPILATION()
|
|
STORAGE_BUF(NORMALS_ACCUMULATE_POS_BUF_SLOT, read, Position, positions[])
|
|
STORAGE_BUF(NORMALS_ACCUMULATE_FACE_ADJACENCY_OFFSETS_BUF_SLOT,
|
|
read,
|
|
uint,
|
|
face_adjacency_offsets[])
|
|
STORAGE_BUF(NORMALS_ACCUMULATE_FACE_ADJACENCY_LISTS_BUF_SLOT, read, uint, face_adjacency_lists[])
|
|
STORAGE_BUF(NORMALS_ACCUMULATE_VERTEX_LOOP_MAP_BUF_SLOT, read, uint, vert_loop_map[])
|
|
STORAGE_BUF(NORMALS_ACCUMULATE_NORMALS_BUF_SLOT, write, Normal, vert_normals[])
|
|
COMPUTE_SOURCE("subdiv_normals_accumulate_comp.glsl")
|
|
ADDITIONAL_INFO(subdiv_base)
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
/** \} */
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/** \name Paint Overlay Flag
|
|
* \{ */
|
|
|
|
GPU_SHADER_CREATE_INFO(subdiv_paint_overlay_flag)
|
|
DO_STATIC_COMPILATION()
|
|
STORAGE_BUF(PAINT_OVERLAY_EXTRA_COARSE_FACE_DATA_BUF_SLOT, read, uint, extra_coarse_face_data[])
|
|
STORAGE_BUF(PAINT_OVERLAY_EXTRA_INPUT_VERT_ORIG_INDEX_SLOT, read, int, input_vert_origindex[])
|
|
STORAGE_BUF(PAINT_OVERLAY_OUTPUT_FLAG_SLOT, write, int, flags[])
|
|
COMPUTE_SOURCE("subdiv_vbo_paint_overlay_flag_comp.glsl")
|
|
ADDITIONAL_INFO(subdiv_polygon_offset_base)
|
|
GPU_SHADER_CREATE_END()
|
|
|
|
/** \} */
|