[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