[Bf-blender-cvs] [d90a2b0ab79] master: Metal: GLSL compatibility.
Jason Fielder
noreply at git.blender.org
Thu Dec 8 21:36:57 CET 2022
Commit: d90a2b0ab7926b524d4c1b2223ca2baf73cd0ee4
Author: Jason Fielder
Date: Thu Dec 8 21:29:40 2022 +0100
Branches: master
https://developer.blender.org/rBd90a2b0ab7926b524d4c1b2223ca2baf73cd0ee4
Metal: GLSL compatibility.
Additional mat3 constructors added, global variable namespace collisions
for uniform and object color avoided via re-name.
Metal vertex format compatibility added for shaders wherein vertex data
goes through a double-conversion and cannot be implicitly converted during
Metal vertex assembly e.g. bitmasks passed directly as unsigned type in
shader interface for certain shader interfaces.
Authored by Apple: Michael Parkin-White
Ref T96261
Reviewed By: fclem
Differential Revision: https://developer.blender.org/D16433
===================================================================
M source/blender/draw/CMakeLists.txt
M source/blender/draw/engines/overlay/overlay_grid.cc
M source/blender/draw/engines/overlay/overlay_shader_shared.h
M source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh
M source/blender/draw/engines/overlay/shaders/infos/overlay_extra_info.hh
M source/blender/draw/engines/overlay/shaders/infos/overlay_grid_info.hh
M source/blender/draw/engines/overlay/shaders/infos/overlay_outline_info.hh
M source/blender/draw/engines/overlay/shaders/overlay_edit_curve_handle_geom.glsl
M source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_common_lib.glsl
M source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_geom.glsl
M source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_vert.glsl
M source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_vert_no_geom.glsl
M source/blender/draw/engines/overlay/shaders/overlay_edit_uv_edges_vert.glsl
A source/blender/draw/engines/overlay/shaders/overlay_edit_uv_edges_vert_no_geom.glsl
M source/blender/draw/engines/overlay/shaders/overlay_grid_background_frag.glsl
A source/blender/draw/engines/overlay/shaders/overlay_outline_prepass_vert_no_geom.glsl
M source/blender/draw/intern/draw_common_shader_shared.h
M source/blender/draw/intern/draw_debug.cc
M source/blender/draw/intern/draw_resource.hh
M source/blender/draw/intern/draw_shader_shared.h
M source/blender/draw/intern/shaders/common_debug_draw_lib.glsl
M source/blender/draw/intern/shaders/draw_debug_draw_display_vert.glsl
M source/blender/draw/intern/shaders/draw_object_infos_info.hh
M source/blender/gpu/intern/gpu_shader_create_info.cc
M source/blender/gpu/shaders/gpu_shader_keyframe_shape_frag.glsl
M source/blender/gpu/shaders/gpu_shader_keyframe_shape_vert.glsl
M source/blender/gpu/shaders/infos/gpu_shader_2D_nodelink_info.hh
M source/blender/gpu/shaders/infos/gpu_shader_keyframe_shape_info.hh
M source/blender/gpu/shaders/metal/mtl_shader_defines.msl
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 304c913526b..f38e61add02 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -605,6 +605,7 @@ set(GLSL_SRC
engines/overlay/shaders/overlay_edit_uv_edges_frag.glsl
engines/overlay/shaders/overlay_edit_uv_edges_geom.glsl
engines/overlay/shaders/overlay_edit_uv_edges_vert.glsl
+ engines/overlay/shaders/overlay_edit_uv_edges_vert_no_geom.glsl
engines/overlay/shaders/overlay_edit_uv_face_dots_vert.glsl
engines/overlay/shaders/overlay_edit_uv_faces_vert.glsl
engines/overlay/shaders/overlay_edit_uv_image_mask_frag.glsl
@@ -642,6 +643,7 @@ set(GLSL_SRC
engines/overlay/shaders/overlay_outline_prepass_gpencil_vert.glsl
engines/overlay/shaders/overlay_outline_prepass_pointcloud_vert.glsl
engines/overlay/shaders/overlay_outline_prepass_vert.glsl
+ engines/overlay/shaders/overlay_outline_prepass_vert_no_geom.glsl
engines/overlay/shaders/overlay_paint_face_vert.glsl
engines/overlay/shaders/overlay_paint_point_vert.glsl
engines/overlay/shaders/overlay_paint_texture_frag.glsl
diff --git a/source/blender/draw/engines/overlay/overlay_grid.cc b/source/blender/draw/engines/overlay/overlay_grid.cc
index 7c221e67691..b38825723f4 100644
--- a/source/blender/draw/engines/overlay/overlay_grid.cc
+++ b/source/blender/draw/engines/overlay/overlay_grid.cc
@@ -241,7 +241,7 @@ void OVERLAY_grid_cache_init(OVERLAY_Data *ved)
DRWShadingGroup *grp = DRW_shgroup_create(sh, psl->grid_ps);
float color_back[4];
interp_v4_v4v4(color_back, G_draw.block.color_background, G_draw.block.color_grid, 0.5);
- DRW_shgroup_uniform_vec4_copy(grp, "color", color_back);
+ DRW_shgroup_uniform_vec4_copy(grp, "ucolor", color_back);
DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth);
unit_m4(mat);
mat[0][0] = grid->size[0];
diff --git a/source/blender/draw/engines/overlay/overlay_shader_shared.h b/source/blender/draw/engines/overlay/overlay_shader_shared.h
index 739e5be6c2f..a04858a4a67 100644
--- a/source/blender/draw/engines/overlay/overlay_shader_shared.h
+++ b/source/blender/draw/engines/overlay/overlay_shader_shared.h
@@ -57,14 +57,14 @@ BLI_STATIC_ASSERT_ALIGN(OVERLAY_GridData, 16)
#ifdef GPU_SHADER
/* Keep the same values as in `draw_cache_imp_curve.c` */
-# define ACTIVE_NURB (1 << 2)
-# define BEZIER_HANDLE (1 << 3)
-# define EVEN_U_BIT (1 << 4)
-# define COLOR_SHIFT 5
+# define ACTIVE_NURB (1u << 2)
+# define BEZIER_HANDLE (1u << 3)
+# define EVEN_U_BIT (1u << 4)
+# define COLOR_SHIFT 5u
/* Keep the same value in `handle_display` in `DNA_view3d_types.h` */
-# define CURVE_HANDLE_SELECTED 0
-# define CURVE_HANDLE_ALL 1
+# define CURVE_HANDLE_SELECTED 0u
+# define CURVE_HANDLE_ALL 1u
# define GP_EDIT_POINT_SELECTED 1u /* 1 << 0 */
# define GP_EDIT_STROKE_SELECTED 2u /* 1 << 1 */
@@ -73,15 +73,15 @@ BLI_STATIC_ASSERT_ALIGN(OVERLAY_GridData, 16)
# define GP_EDIT_STROKE_END 16u /* 1 << 4 */
# define GP_EDIT_POINT_DIMMED 32u /* 1 << 5 */
-# define MOTIONPATH_VERT_SEL (1 << 0)
-# define MOTIONPATH_VERT_KEY (1 << 1)
+# define MOTIONPATH_VERT_SEL (1u << 0)
+# define MOTIONPATH_VERT_KEY (1u << 1)
#else
/* TODO(fclem): Find a better way to share enums/defines from DNA files with GLSL. */
-BLI_STATIC_ASSERT(CURVE_HANDLE_SELECTED == 0, "Ensure value is sync");
-BLI_STATIC_ASSERT(CURVE_HANDLE_ALL == 1, "Ensure value is sync");
-BLI_STATIC_ASSERT(MOTIONPATH_VERT_SEL == (1 << 0), "Ensure value is sync");
-BLI_STATIC_ASSERT(MOTIONPATH_VERT_KEY == (1 << 1), "Ensure value is sync");
+BLI_STATIC_ASSERT(CURVE_HANDLE_SELECTED == 0u, "Ensure value is sync");
+BLI_STATIC_ASSERT(CURVE_HANDLE_ALL == 1u, "Ensure value is sync");
+BLI_STATIC_ASSERT(MOTIONPATH_VERT_SEL == (1u << 0), "Ensure value is sync");
+BLI_STATIC_ASSERT(MOTIONPATH_VERT_KEY == (1u << 1), "Ensure value is sync");
#endif
#ifndef GPU_SHADER
diff --git a/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh b/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh
index 40b7249a997..e1687b23c07 100644
--- a/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh
+++ b/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh
@@ -42,7 +42,7 @@ GPU_SHADER_CREATE_INFO(overlay_edit_mesh_vert)
.builtins(BuiltinBits::POINT_SIZE)
.define("VERT")
.vertex_in(0, Type::VEC3, "pos")
- .vertex_in(1, Type::IVEC4, "data")
+ .vertex_in(1, Type::UVEC4, "data")
.vertex_in(2, Type::VEC3, "vnor")
.vertex_out(overlay_edit_mesh_vert_iface)
.fragment_source("overlay_point_varying_color_frag.glsl")
@@ -51,7 +51,7 @@ GPU_SHADER_CREATE_INFO(overlay_edit_mesh_vert)
GPU_SHADER_INTERFACE_INFO(overlay_edit_mesh_edge_iface, "geometry_in")
.smooth(Type::VEC4, "finalColor_")
.smooth(Type::VEC4, "finalColorOuter_")
- .smooth(Type::INT, "selectOverride_");
+ .smooth(Type::UINT, "selectOverride_");
GPU_SHADER_INTERFACE_INFO(overlay_edit_mesh_edge_geom_iface, "geometry_out")
.smooth(Type::VEC4, "finalColor")
@@ -62,7 +62,7 @@ GPU_SHADER_CREATE_INFO(overlay_edit_mesh_edge)
.do_static_compilation(true)
.define("EDGE")
.vertex_in(0, Type::VEC3, "pos")
- .vertex_in(1, Type::IVEC4, "data")
+ .vertex_in(1, Type::UVEC4, "data")
.vertex_in(2, Type::VEC3, "vnor")
.push_constant(Type::BOOL, "do_smooth_wire")
.vertex_out(overlay_edit_mesh_edge_iface)
@@ -98,7 +98,7 @@ GPU_SHADER_CREATE_INFO(overlay_edit_mesh_face)
.do_static_compilation(true)
.define("FACE")
.vertex_in(0, Type::VEC3, "pos")
- .vertex_in(1, Type::IVEC4, "data")
+ .vertex_in(1, Type::UVEC4, "data")
.vertex_in(2, Type::VEC3, "vnor")
.vertex_out(overlay_edit_flat_color_iface)
.fragment_source("overlay_varying_color.glsl")
@@ -108,7 +108,7 @@ GPU_SHADER_CREATE_INFO(overlay_edit_mesh_facedot)
.do_static_compilation(true)
.define("FACEDOT")
.vertex_in(0, Type::VEC3, "pos")
- .vertex_in(1, Type::IVEC4, "data")
+ .vertex_in(1, Type::UVEC4, "data")
.vertex_in(2, Type::VEC4, "norAndFlag")
.define("vnor", "norAndFlag.xyz")
.vertex_out(overlay_edit_flat_color_iface)
@@ -213,23 +213,32 @@ GPU_SHADER_INTERFACE_INFO(overlay_edit_uv_geom_iface, "geom_out")
.no_perspective(Type::VEC2, "stipplePos")
.flat(Type::VEC2, "stippleStart");
-GPU_SHADER_CREATE_INFO(overlay_edit_uv_edges)
- .do_static_compilation(true)
+GPU_SHADER_CREATE_INFO(overlay_edit_uv_edges_common)
.vertex_in(0, Type::VEC2, "au")
- .vertex_in(1, Type::INT, "flag")
- .vertex_out(overlay_edit_uv_iface)
- .geometry_layout(PrimitiveIn::LINES, PrimitiveOut::TRIANGLE_STRIP, 4)
- .geometry_out(overlay_edit_uv_geom_iface)
+ .vertex_in(1, Type::UINT, "flag")
.push_constant(Type::INT, "lineStyle")
.push_constant(Type::BOOL, "doSmoothWire")
.push_constant(Type::FLOAT, "alpha")
.push_constant(Type::FLOAT, "dashLength")
.fragment_out(0, Type::VEC4, "fragColor")
- .vertex_source("overlay_edit_uv_edges_vert.glsl")
- .geometry_source("overlay_edit_uv_edges_geom.glsl")
.fragment_source("overlay_edit_uv_edges_frag.glsl")
.additional_info("draw_mesh", "draw_globals");
+GPU_SHADER_CREATE_INFO(overlay_edit_uv_edges)
+ .additional_info("overlay_edit_uv_edges_common")
+ .do_static_compilation(true)
+ .vertex_out(overlay_edit_uv_iface)
+ .geometry_layout(PrimitiveIn::LINES, PrimitiveOut::TRIANGLE_STRIP, 4)
+ .geometry_out(overlay_edit_uv_geom_iface)
+ .vertex_source("overlay_edit_uv_edges_vert.glsl")
+ .geometry_source("overlay_edit_uv_edges_geom.glsl");
+
+GPU_SHADER_CREATE_INFO(overlay_edit_uv_edges_no_geom)
+ .additional_info("overlay_edit_uv_edges_common")
+ // .do_static_compilation(true)
+ .vertex_out(overlay_edit_uv_geom_iface)
+ .vertex_source("overlay_edit_uv_edges_vert_no_geom.glsl");
+
GPU_SHADER_CREATE_INFO(overlay_edit_uv_edges_select)
.do_static_compilation(true)
.define("USE_EDGE_SELECT")
@@ -238,7 +247,7 @@ GPU_SHADER_CREATE_INFO(overlay_edit_uv_edges_select)
GPU_SHADER_CREATE_INFO(overlay_edit_uv_faces)
.do_static_compilation(true)
.vertex_in(0, Type::VEC2, "au")
- .vertex_in(1, Type::INT, "flag")
+ .vertex_in(1, Type::UINT, "flag")
.push_constant(Type::FLOAT, "uvOpacity")
.vertex_out(overlay_edit_flat_color_iface)
.fragment_out(0, Type::VEC4, "fragColor")
@@ -249,7 +258,7 @@ GPU_SHADER_CREATE_INFO(overlay_edit_uv_faces)
GPU_SHADER_CREATE_INFO(overlay_edit_uv_face_dots)
.do_static_compilation(true)
.vertex_in(0, Type::VEC2, "au")
- .vertex_in(1, Type::INT, "flag")
+ .vertex_in(1, Type::UINT, "flag")
.push_constant(Type::FLOAT, "pointSize")
.vertex_out(overlay_edit_flat_color_iface)
.fragment_out(0, Type::VEC4, "fragColor")
@@ -265,7 +274,7 @@ GPU_SHADER_INTERFACE_INFO(overlay_edit_uv_vert_iface, "")
GPU_SHADER_CREATE_INFO(overlay_edit_uv_verts)
.do_static_compilation(true)
.vertex_in(0, Type::VEC2, "au")
- .vertex_in(1, Type::INT, "flag")
+ .vertex_in(1, Type::UINT, "flag")
.push_constant(Type::FLOAT, "pointSize")
.push_constant(Type::FLOAT, "outlineWidth")
.push_constant(Type::VEC4, "color")
@@ -344,13 +353,13 @@ GPU_SHADER_CREATE_INFO(overlay_edit_uv_stretching_angle)
/** \name Edit Curve
* \{ */
-GPU_SHADER_INTERFACE_INFO(overlay_edit_curve_handle_iface, "vert").flat(Type::INT, "flag");
+GPU_SHADER_INTERFACE_INFO(overlay_edit_curve_handle_iface, "vert").flat(Type::UINT, "flag");
GPU_SHADER_CREATE_INFO(overlay_edit_curve_handle)
.do_static_compilation(true)
.typedef_source("overlay_shader_shared.h")
.vertex_in(0, Type::VEC3, "pos")
- .vertex_in(1, Type::INT, "data")
+ .vertex_in(1, Type::UINT, "data")
.vertex_out(overlay_edit_curve_handle_iface)
.geometry_layout(PrimitiveIn::LINES, PrimitiveOut::TRIANGLE_STRIP, 10)
.geometry_out(overlay_edit_smooth_color_iface)
@@ -368,7 +377,7 @@ GPU_SHADER_CREATE_INFO(overlay_edit_curve_handle_no_geom)
/* NOTE: Color already in Linear space. Which is what we want. */
.define("s
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list