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. @@ _______________________________________________ Bf-blender-cvs mailing list [email protected] List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
