Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-05-22 00:59:57 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-05-22 09:32:39 +0300
commitc06bd2d18461b192cb4780a298301eebca76d20c (patch)
tree2d95d844d5e16ea975cd3317a7cf1375e8eb1d04 /source/blender/draw
parentff3a20d1bc28a9fd8bc77960f1f312485b6fb1f2 (diff)
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
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/modes/shaders/common_view_lib.glsl8
-rw-r--r--source/blender/draw/modes/shaders/edit_curve_overlay_handle_vert.glsl2
-rw-r--r--source/blender/draw/modes/shaders/edit_curve_overlay_loosevert_vert.glsl2
-rw-r--r--source/blender/draw/modes/shaders/edit_curve_overlay_normals_vert.glsl2
-rw-r--r--source/blender/draw/modes/shaders/edit_lattice_overlay_loosevert_vert.glsl2
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_facefill_vert.glsl2
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_vert.glsl2
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl2
-rw-r--r--source/blender/draw/modes/shaders/edit_normals_vert.glsl2
9 files changed, 24 insertions, 0 deletions
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);