diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
index 0d5c76ad790..23f8e14600a 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
@@ -15,7 +15,7 @@ in vec3 vertexColor;
#endif
#ifdef EDGE_FIX
-flat in vec2 ssPos[3];
+flat in vec4 ssPos[3];
#else
in vec3 barycentric;
#endif
@@ -37,15 +37,15 @@ out vec4 FragColor;
void distToEdgesAndPoints(out vec3 edges, out vec3 points)
{
#ifdef EDGE_FIX
- vec2 e0 = normalize(ssPos[1] - ssPos[0] + 1e-8);
- vec2 e1 = normalize(ssPos[2] - ssPos[1] + 1e-8);
- vec2 e2 = normalize(ssPos[0] - ssPos[2] + 1e-8);
+ vec2 e0 = normalize(ssPos[1].xy - ssPos[0].xy + 1e-8);
+ vec2 e1 = normalize(ssPos[2].xy - ssPos[1].xy + 1e-8);
+ vec2 e2 = normalize(ssPos[0].xy - ssPos[2].xy + 1e-8);
e0 = vec2(-e0.y, e0.x);
e1 = vec2(-e1.y, e1.x);
e2 = vec2(-e2.y, e2.x);
- vec2 p0 = gl_FragCoord.xy - ssPos[0];
- vec2 p1 = gl_FragCoord.xy - ssPos[1];
- vec2 p2 = gl_FragCoord.xy - ssPos[2];
+ vec2 p0 = gl_FragCoord.xy - ssPos[0].xy;
+ vec2 p1 = gl_FragCoord.xy - ssPos[1].xy;
+ vec2 p2 = gl_FragCoord.xy - ssPos[2].xy;
edges.z = abs(dot(e0, p0));
edges.x = abs(dot(e1, p1));
edges.y = abs(dot(e2, p2));
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
index 1a44e4a9e4f..135afffd04d 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
@@ -28,7 +28,7 @@ out float facing;
#endif
/* See fragment shader */
-flat out vec2 ssPos[3];
+flat out vec4 ssPos[3];
/* Some bugged AMD drivers need these global variables. See T55961 */
#ifdef VERTEX_SELECTION
@@ -101,8 +101,8 @@ void main()
#endif
/* Edge / Vert data */
- ssPos[0] = ssPos[2] = pos[0];
- ssPos[1] = pos[1];
+ ssPos[0].xy = ssPos[2].xy = pos[0];
+ ssPos[1].xy = pos[1];
flag[0] = flag[2] = (vData[0].x << 8);
flag[1] = (vData[1].x << 8);
doVertex(0, pPos[0] + vec4( dirs1.zw, 0.0, 0.0));
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
index fa2063a40a6..85fc0de54c0 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
@@ -28,7 +28,7 @@ flat out vec3 edgesBweight;
flat out vec4 faceColor;
flat out ivec3 flag;
-flat out vec2 ssPos[3];
+flat out vec4 ssPos[3];
#ifdef VERTEX_SELECTION
out vec3 vertexColor;
#endif
@@ -110,9 +110,9 @@ vec2 compute_fixvec(int i)
vec2(-epsilon, epsilon),
vec2( 0.0, -epsilon)
);
- vec2 v1 = ssPos[i] + bias[i];
- vec2 v2 = ssPos[i1] + bias[i1];
- vec2 v3 = ssPos[i2] + bias[i2];
+ vec2 v1 = ssPos[i].xy + bias[i];
+ vec2 v2 = ssPos[i1].xy + bias[i1];
+ vec2 v3 = ssPos[i2].xy + bias[i2];
/* Edge normalized vector */
vec2 dir = normalize(v2 - v1);
vec2 dir2 = normalize(v3 - v1);
@@ -148,9 +148,9 @@ void main()
fcol = colorFace;
/* Vertex */
- ssPos[0] = proj(pPos[0]);
- ssPos[1] = proj(pPos[1]);
- ssPos[2] = proj(pPos[2]);
+ ssPos[0].xy = proj(pPos[0]);
+ ssPos[1].xy = proj(pPos[1]);
+ ssPos[2].xy = proj(pPos[2]);
#ifdef VERTEX_SELECTION
vertex_color[0] = EDIT_MESH_vertex_color(vData[0].x).rgb;