From c06bd2d18461b192cb4780a298301eebca76d20c Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 21 May 2019 23:59:57 +0200 Subject: Fix T64499: edit mode display glitch on Intel HD 4x00 and Windows 7/8 There may well be more vertex shaders that need this, but I couldn't find them in my testing. Differential Revision: https://developer.blender.org/D4921 --- source/blender/draw/modes/shaders/common_view_lib.glsl | 8 ++++++++ .../draw/modes/shaders/edit_curve_overlay_handle_vert.glsl | 2 ++ .../draw/modes/shaders/edit_curve_overlay_loosevert_vert.glsl | 2 ++ .../draw/modes/shaders/edit_curve_overlay_normals_vert.glsl | 2 ++ .../draw/modes/shaders/edit_lattice_overlay_loosevert_vert.glsl | 2 ++ .../draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl | 2 ++ .../draw/modes/shaders/edit_mesh_overlay_mesh_analysis_vert.glsl | 2 ++ source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl | 2 ++ source/blender/draw/modes/shaders/edit_normals_vert.glsl | 2 ++ 9 files changed, 24 insertions(+) (limited to 'source/blender/draw') diff --git a/source/blender/draw/modes/shaders/common_view_lib.glsl b/source/blender/draw/modes/shaders/common_view_lib.glsl index 79ac351912d..9802b9111fc 100644 --- a/source/blender/draw/modes/shaders/common_view_lib.glsl +++ b/source/blender/draw/modes/shaders/common_view_lib.glsl @@ -48,3 +48,11 @@ uniform mat4 ModelMatrixInverse; #define point_world_to_ndc(p) (ViewProjectionMatrix * vec4(p, 1.0)) #define point_world_to_object(p) ((ModelMatrixInverse * vec4(p, 1.0)).xyz) #define point_world_to_view(p) ((ViewMatrix * vec4(p, 1.0)).xyz) + +/* Due to some shader compiler bug, we somewhat need to access gl_VertexID + * to make vertex shaders work. even if it's actually dead code. */ +#ifdef GPU_INTEL +# define GPU_INTEL_VERTEX_SHADER_WORKAROUND gl_Position.x = float(gl_VertexID); +#else +# define GPU_INTEL_VERTEX_SHADER_WORKAROUND +#endif diff --git a/source/blender/draw/modes/shaders/edit_curve_overlay_handle_vert.glsl b/source/blender/draw/modes/shaders/edit_curve_overlay_handle_vert.glsl index 2f3d37a6e73..590c2905be6 100644 --- a/source/blender/draw/modes/shaders/edit_curve_overlay_handle_vert.glsl +++ b/source/blender/draw/modes/shaders/edit_curve_overlay_handle_vert.glsl @@ -7,6 +7,8 @@ flat out int vertFlag; void main() { + GPU_INTEL_VERTEX_SHADER_WORKAROUND + vec3 world_pos = point_object_to_world(pos); gl_Position = point_world_to_ndc(world_pos); vertFlag = data; diff --git a/source/blender/draw/modes/shaders/edit_curve_overlay_loosevert_vert.glsl b/source/blender/draw/modes/shaders/edit_curve_overlay_loosevert_vert.glsl index b1b707b59f4..6eec43d99be 100644 --- a/source/blender/draw/modes/shaders/edit_curve_overlay_loosevert_vert.glsl +++ b/source/blender/draw/modes/shaders/edit_curve_overlay_loosevert_vert.glsl @@ -9,6 +9,8 @@ out vec4 finalColor; void main() { + GPU_INTEL_VERTEX_SHADER_WORKAROUND + if ((data & VERT_SELECTED) != 0) { if ((data & VERT_ACTIVE) != 0) { finalColor = colorEditMeshActive; diff --git a/source/blender/draw/modes/shaders/edit_curve_overlay_normals_vert.glsl b/source/blender/draw/modes/shaders/edit_curve_overlay_normals_vert.glsl index ef60ddbc395..e1d5319ffb9 100644 --- a/source/blender/draw/modes/shaders/edit_curve_overlay_normals_vert.glsl +++ b/source/blender/draw/modes/shaders/edit_curve_overlay_normals_vert.glsl @@ -9,6 +9,8 @@ in float rad; void main() { + GPU_INTEL_VERTEX_SHADER_WORKAROUND + vec3 final_pos = pos; float flip = (gl_InstanceID != 0) ? -1.0 : 1.0; diff --git a/source/blender/draw/modes/shaders/edit_lattice_overlay_loosevert_vert.glsl b/source/blender/draw/modes/shaders/edit_lattice_overlay_loosevert_vert.glsl index f7df6bb4b68..ac6b353412d 100644 --- a/source/blender/draw/modes/shaders/edit_lattice_overlay_loosevert_vert.glsl +++ b/source/blender/draw/modes/shaders/edit_lattice_overlay_loosevert_vert.glsl @@ -22,6 +22,8 @@ vec2 proj(vec4 pos) void main() { + GPU_INTEL_VERTEX_SHADER_WORKAROUND + clipCase = 0; vec3 world_pos = point_object_to_world(pos); diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl index a20c1124fe1..df37c6fb0bc 100644 --- a/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl +++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl @@ -8,6 +8,8 @@ flat out vec4 faceColor; void main() { + GPU_INTEL_VERTEX_SHADER_WORKAROUND + vec3 world_pos = point_object_to_world(pos); gl_Position = point_world_to_ndc(world_pos); diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_vert.glsl index 968a63c7780..7065ce3df7c 100644 --- a/source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_vert.glsl +++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_vert.glsl @@ -12,6 +12,8 @@ out vec4 weightColor; void main() { + GPU_INTEL_VERTEX_SHADER_WORKAROUND + vec3 world_pos = point_object_to_world(pos); gl_Position = point_world_to_ndc(world_pos); weightColor = vec4(weight_color.rgb, 1.0); diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl index 9aa656818cb..fabc317cf4f 100644 --- a/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl +++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl @@ -20,6 +20,8 @@ out int selectOveride; void main() { + GPU_INTEL_VERTEX_SHADER_WORKAROUND + vec3 world_pos = point_object_to_world(pos); #if !defined(FACE) diff --git a/source/blender/draw/modes/shaders/edit_normals_vert.glsl b/source/blender/draw/modes/shaders/edit_normals_vert.glsl index 9bf0fb7315c..384d13923f6 100644 --- a/source/blender/draw/modes/shaders/edit_normals_vert.glsl +++ b/source/blender/draw/modes/shaders/edit_normals_vert.glsl @@ -21,6 +21,8 @@ flat out vec4 v2; void main() { + GPU_INTEL_VERTEX_SHADER_WORKAROUND + vec3 n = normalize(normal_object_to_world(nor)); vec3 world_pos = point_object_to_world(pos); -- cgit v1.2.3