[Bf-blender-cvs] [18b45aabf91] master: Metal: GLSL shader compatibility changes for global uniform and interface name collision.

Jason Fielder noreply at git.blender.org
Thu Sep 22 17:55:11 CEST 2022


Commit: 18b45aabf91ad0a407e8c7cd16c5503e7a99d6fa
Author: Jason Fielder
Date:   Thu Sep 22 17:52:44 2022 +0200
Branches: master
https://developer.blender.org/rB18b45aabf91ad0a407e8c7cd16c5503e7a99d6fa

Metal: GLSL shader compatibility changes for global uniform and interface name collision.

For the Metal shader translation support for shader-global uniforms are remapped via macro's, and in such cases where a uniform name matches a vertex attribute name, compilation errors will occur due to this injected syntax being incompatible with the immediate code.

Also adding source-level function interface alternatives where sized arrays are passed in. These are not supported directly in Metal shading language and are instead handled as pointers. These pointers require explicit address-space qualifiers in some cases, if device/constant address space memory is passed into the function.

Ref T96261

Reviewed By: fclem

Differential Revision: https://developer.blender.org/D15898

===================================================================

M	intern/opencolorio/gpu_shader_display_transform_frag.glsl
M	source/blender/draw/engines/overlay/overlay_armature.cc
M	source/blender/draw/engines/overlay/overlay_background.cc
M	source/blender/draw/engines/overlay/overlay_edit_text.cc
M	source/blender/draw/engines/overlay/overlay_edit_uv.cc
M	source/blender/draw/engines/overlay/overlay_extra.cc
M	source/blender/draw/engines/overlay/overlay_fade.cc
M	source/blender/draw/engines/overlay/overlay_grid.cc
M	source/blender/draw/engines/overlay/overlay_image.cc
M	source/blender/draw/engines/overlay/overlay_mode_transfer.cc
M	source/blender/draw/engines/overlay/overlay_paint.cc
M	source/blender/draw/engines/overlay/shaders/infos/overlay_background_info.hh
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_paint_info.hh
M	source/blender/draw/engines/overlay/shaders/overlay_extra_point_vert.glsl
M	source/blender/draw/engines/overlay/shaders/overlay_particle_vert.glsl
M	source/blender/draw/engines/overlay/shaders/overlay_uniform_color_frag.glsl
M	source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl
M	source/blender/draw/intern/shaders/common_smaa_lib.glsl
M	source/blender/gpu/shaders/gpu_shader_3D_polyline_frag.glsl
M	source/blender/gpu/shaders/gpu_shader_3D_polyline_geom.glsl
M	source/blender/gpu/shaders/gpu_shader_3D_polyline_vert.glsl
M	source/blender/gpu/shaders/infos/gpu_shader_3D_polyline_info.hh

===================================================================

diff --git a/intern/opencolorio/gpu_shader_display_transform_frag.glsl b/intern/opencolorio/gpu_shader_display_transform_frag.glsl
index 3c2352c13ba..92cf9b013fd 100644
--- a/intern/opencolorio/gpu_shader_display_transform_frag.glsl
+++ b/intern/opencolorio/gpu_shader_display_transform_frag.glsl
@@ -130,8 +130,10 @@ vec4 apply_dither(vec4 col, vec2 uv)
  * \{ */
 
 /* Prototypes: Implementation is generaterd and defined after. */
+#ifndef GPU_METAL /* Forward declaration invalid in MSL. */
 vec4 OCIO_to_scene_linear(vec4 pixel);
 vec4 OCIO_to_display(vec4 pixel);
+#endif
 
 vec4 OCIO_ProcessColor(vec4 col, vec4 col_overlay)
 {
diff --git a/source/blender/draw/engines/overlay/overlay_armature.cc b/source/blender/draw/engines/overlay/overlay_armature.cc
index 1e10fc7cd20..494fd3739d7 100644
--- a/source/blender/draw/engines/overlay/overlay_armature.cc
+++ b/source/blender/draw/engines/overlay/overlay_armature.cc
@@ -140,11 +140,11 @@ void OVERLAY_armature_cache_init(OVERLAY_Data *vedata)
 
     pd->armature_bone_select_act_grp = grp = DRW_shgroup_create(sh, psl->armature_bone_select_ps);
     float4 color = {0.0f, 0.0f, 0.0f, alpha};
-    DRW_shgroup_uniform_vec4_copy(grp, "color", color);
+    DRW_shgroup_uniform_vec4_copy(grp, "ucolor", color);
 
     pd->armature_bone_select_grp = grp = DRW_shgroup_create(sh, psl->armature_bone_select_ps);
     color = {0.0f, 0.0f, 0.0f, powf(alpha, 4)};
-    DRW_shgroup_uniform_vec4_copy(grp, "color", color);
+    DRW_shgroup_uniform_vec4_copy(grp, "ucolor", color);
   }
 
   for (int i = 0; i < 2; i++) {
diff --git a/source/blender/draw/engines/overlay/overlay_background.cc b/source/blender/draw/engines/overlay/overlay_background.cc
index e8bae74c70a..2442efc033e 100644
--- a/source/blender/draw/engines/overlay/overlay_background.cc
+++ b/source/blender/draw/engines/overlay/overlay_background.cc
@@ -89,7 +89,7 @@ void OVERLAY_background_cache_init(OVERLAY_Data *vedata)
 
     GPUShader *sh = OVERLAY_shader_clipbound();
     DRWShadingGroup *grp = DRW_shgroup_create(sh, psl->clipping_frustum_ps);
-    DRW_shgroup_uniform_vec4_copy(grp, "color", G_draw.block.color_clipping_border);
+    DRW_shgroup_uniform_vec4_copy(grp, "ucolor", G_draw.block.color_clipping_border);
     DRW_shgroup_uniform_vec3(grp, "boundbox", &bb->vec[0][0], 8);
 
     struct GPUBatch *cube = DRW_cache_cube_get();
diff --git a/source/blender/draw/engines/overlay/overlay_edit_text.cc b/source/blender/draw/engines/overlay/overlay_edit_text.cc
index f541619ccdd..ebadaa530e4 100644
--- a/source/blender/draw/engines/overlay/overlay_edit_text.cc
+++ b/source/blender/draw/engines/overlay/overlay_edit_text.cc
@@ -37,7 +37,7 @@ void OVERLAY_edit_text_cache_init(OVERLAY_Data *vedata)
 
     sh = OVERLAY_shader_uniform_color();
     pd->edit_text_wire_grp[i] = grp = DRW_shgroup_create(sh, psl->edit_text_wire_ps[i]);
-    DRW_shgroup_uniform_vec4_copy(grp, "color", G_draw.block.color_wire);
+    DRW_shgroup_uniform_vec4_copy(grp, "ucolor", G_draw.block.color_wire);
   }
   {
     /* Cursor (text caret). */
@@ -45,14 +45,14 @@ void OVERLAY_edit_text_cache_init(OVERLAY_Data *vedata)
     DRW_PASS_CREATE(psl->edit_text_cursor_ps, state | pd->clipping_state);
     sh = OVERLAY_shader_uniform_color();
     pd->edit_text_cursor_grp = grp = DRW_shgroup_create(sh, psl->edit_text_cursor_ps);
-    DRW_shgroup_uniform_vec4(grp, "color", pd->edit_text.cursor_color, 1);
+    DRW_shgroup_uniform_vec4(grp, "ucolor", pd->edit_text.cursor_color, 1);
 
     /* Selection boxes. */
     state = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA;
     DRW_PASS_CREATE(psl->edit_text_selection_ps, state | pd->clipping_state);
     sh = OVERLAY_shader_uniform_color();
     pd->edit_text_selection_grp = grp = DRW_shgroup_create(sh, psl->edit_text_selection_ps);
-    DRW_shgroup_uniform_vec4(grp, "color", pd->edit_text.selection_color, 1);
+    DRW_shgroup_uniform_vec4(grp, "ucolor", pd->edit_text.selection_color, 1);
 
     /* Highlight text within selection boxes. */
     state = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_ALPHA | DRW_STATE_DEPTH_GREATER_EQUAL |
diff --git a/source/blender/draw/engines/overlay/overlay_edit_uv.cc b/source/blender/draw/engines/overlay/overlay_edit_uv.cc
index c173201b271..25fa25c611d 100644
--- a/source/blender/draw/engines/overlay/overlay_edit_uv.cc
+++ b/source/blender/draw/engines/overlay/overlay_edit_uv.cc
@@ -116,10 +116,10 @@ void OVERLAY_edit_uv_init(OVERLAY_Data *vedata)
   const bool show_modified_uvs = sima->flag & SI_DRAWSHADOW;
   const bool is_tiled_image = image && (image->source == IMA_SRC_TILED);
   const bool do_edges_only = (ts->uv_flag & UV_SYNC_SELECTION) ?
-                                  /* NOTE: Ignore #SCE_SELECT_EDGE because a single selected edge
-                                   * on the mesh may cause single UV vertices to be selected. */
-                                  false :
-                                  (ts->uv_selectmode == UV_SELECT_EDGE);
+                                 /* NOTE: Ignore #SCE_SELECT_EDGE because a single selected edge
+                                  * on the mesh may cause single UV vertices to be selected. */
+                                 false :
+                                 (ts->uv_selectmode == UV_SELECT_EDGE);
   const bool do_faces = ((sima->flag & SI_NO_DRAWFACES) == 0);
   const bool do_face_dots = (ts->uv_flag & UV_SYNC_SELECTION) ?
                                 (ts->selectmode & SCE_SELECT_FACE) != 0 :
@@ -301,7 +301,7 @@ void OVERLAY_edit_uv_cache_init(OVERLAY_Data *vedata)
     srgb_to_linearrgb_v4(selected_color, selected_color);
 
     DRWShadingGroup *grp = DRW_shgroup_create(sh, psl->edit_uv_tiled_image_borders_ps);
-    DRW_shgroup_uniform_vec4_copy(grp, "color", theme_color);
+    DRW_shgroup_uniform_vec4_copy(grp, "ucolor", theme_color);
     const float3 offset = {0.0f, 0.0f, 0.0f};
     DRW_shgroup_uniform_vec3_copy(grp, "offset", offset);
 
diff --git a/source/blender/draw/engines/overlay/overlay_extra.cc b/source/blender/draw/engines/overlay/overlay_extra.cc
index 3e9855720b3..f0665f7e90f 100644
--- a/source/blender/draw/engines/overlay/overlay_extra.cc
+++ b/source/blender/draw/engines/overlay/overlay_extra.cc
@@ -195,23 +195,23 @@ void OVERLAY_extra_cache_init(OVERLAY_Data *vedata)
       DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
 
       grp_sub = DRW_shgroup_create_sub(grp);
-      DRW_shgroup_uniform_vec4_copy(grp_sub, "color", G_draw.block.color_active);
+      DRW_shgroup_uniform_vec4_copy(grp_sub, "ucolor", G_draw.block.color_active);
       cb->center_active = BUF_POINT(grp_sub, format);
 
       grp_sub = DRW_shgroup_create_sub(grp);
-      DRW_shgroup_uniform_vec4_copy(grp_sub, "color", G_draw.block.color_select);
+      DRW_shgroup_uniform_vec4_copy(grp_sub, "ucolor", G_draw.block.color_select);
       cb->center_selected = BUF_POINT(grp_sub, format);
 
       grp_sub = DRW_shgroup_create_sub(grp);
-      DRW_shgroup_uniform_vec4_copy(grp_sub, "color", G_draw.block.color_deselect);
+      DRW_shgroup_uniform_vec4_copy(grp_sub, "ucolor", G_draw.block.color_deselect);
       cb->center_deselected = BUF_POINT(grp_sub, format);
 
       grp_sub = DRW_shgroup_create_sub(grp);
-      DRW_shgroup_uniform_vec4_copy(grp_sub, "color", G_draw.block.color_library_select);
+      DRW_shgroup_uniform_vec4_copy(grp_sub, "ucolor", G_draw.block.color_library_select);
       cb->center_selected_lib = BUF_POINT(grp_sub, format);
 
       grp_sub = DRW_shgroup_create_sub(grp);
-      DRW_shgroup_uniform_vec4_copy(grp_sub, "color", G_draw.block.color_library);
+      DRW_shgroup_uniform_vec4_copy(grp_sub, "ucolor", G_draw.block.color_library);
       cb->center_deselected_lib = BUF_POINT(grp_sub, format);
     }
   }
diff --git a/source/blender/draw/engines/overlay/overlay_fade.cc b/source/blender/draw/engines/overlay/overlay_fade.cc
index 138226c3e2e..ee5540d91eb 100644
--- a/source/blender/draw/engines/overlay/overlay_fade.cc
+++ b/source/blender/draw/engines/overlay/overlay_fade.cc
@@ -36,7 +36,7 @@ void OVERLAY_fade_cache_init(OVERLAY_Data *vedata)
     if (draw_ctx->v3d->shading.background_type == V3D_SHADING_BACKGROUND_THEME) {
       srgb_to_linearrgb_v4(color, color);
     }
-    DRW_shgroup_uniform_vec4_copy(pd->fade_grp[i], "color", color);
+    DRW_shgroup_uniform_vec4_copy(pd->fade_grp[i], "ucolor", color);
   }
 
   if (!pd->use_in_front) {
diff --git a/source/blender/draw/engines/overlay/overlay_grid.cc b/source/blender/draw/engines/overlay/overlay_grid.cc
index 89fc6ec2eb7..d1958205a10 100644
--- a/source/blender/draw/engines/overlay/overlay_grid.cc
+++ b/source/blender/draw/engines/overlay/overlay_grid.cc
@@ -290,7 +290,7 @@ void OVERLAY_grid_cache_init(OVERLAY_Data *ved)
     /* add wire border */
     GPUShader *sh = OVERLAY_shader_grid_image();
     DRWShadingGroup *grp = DRW_shgroup_create(sh, psl->grid_ps);
-    DRW_shgroup_uniform_vec4_copy(grp, "color", theme_color);
+    DRW_shgroup_uniform_vec4_copy(grp, "ucolor", theme_color);
     unit_m4(mat);
     for (int x = 0; x < grid->size[0]; x++) {
       mat[3][0] = x;
diff --git a/source/blender/draw/engines/overlay/overlay_image.cc b/source/blender/draw/engines/overlay/overlay_image.cc
index dff30eed620..47587319098 100644
--- a/source/blender/draw/engines/overlay/overlay_image.cc
+++ b/source/blender/draw/engines/overlay/overlay_image.cc
@@ -349,7 +349,7 @@ void OVERLAY_image_camera_cache_populate(OVERLAY_Data *vedata, Object *ob)
       DRW_shgroup_uniform_bool_copy(grp, "imgAlphaBlend", true);
       DRW_shgroup_uniform_bool_copy(grp, "isCameraBackground", true);
       DRW_shgroup_uniform_bool_copy(grp, "depthSet", true);
-      DRW_shgroup_uniform_vec4_copy(grp, "color", color_premult_alpha);
+      DRW_shgroup_uniform_vec4_copy(grp, "ucolor", color_premult_alpha);
       DRW_shgroup_call_obmat(grp, DRW_cache_quad_get(), mat);
     }
   }
@@ -435,7 +435,7 @@ void OVERLAY_image_empty_cache_populate(OVERLAY_Data *vedata, Object *ob)
     DRW_shgroup_uniform_bool_copy(grp, "imgAlphaBlend", use_alpha_blend);
     DRW_shgroup_uniform_bool_copy(grp, "isCameraBackground", false);
     DRW_shgroup_uniform_bool_copy(grp, "depthSet", depth_mode != OB_EMPTY_IMAGE_DEPTH_DEF

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list