[Bf-blender-cvs] [d51dcaf1041] blender-v2.82-release: Fix T73116 Crash on startup caused by implicit conversion in glsl

Clément Foucault noreply at git.blender.org
Tue Jan 14 17:26:44 CET 2020


Commit: d51dcaf1041d2bda093b1a6bc688fd4237da0e61
Author: Clément Foucault
Date:   Tue Jan 14 17:26:35 2020 +0100
Branches: blender-v2.82-release
https://developer.blender.org/rBd51dcaf1041d2bda093b1a6bc688fd4237da0e61

Fix T73116 Crash on startup caused by implicit conversion in glsl

Old drivers does not support this. Promote everything to uint.

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

M	source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl
M	source/blender/draw/engines/overlay/shaders/outline_prepass_geom.glsl
M	source/blender/draw/engines/overlay/shaders/outline_prepass_vert.glsl

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

diff --git a/source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl b/source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl
index 8ef89b89eb3..f6e3724eb51 100644
--- a/source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl
+++ b/source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl
@@ -1,10 +1,10 @@
 
-flat in int objectId;
+flat in uint objectId;
 
 /* using uint because 16bit uint can contain more ids than int. */
 out uint outId;
 
 void main()
 {
-  outId = uint(objectId);
+  outId = objectId;
 }
diff --git a/source/blender/draw/engines/overlay/shaders/outline_prepass_geom.glsl b/source/blender/draw/engines/overlay/shaders/outline_prepass_geom.glsl
index b32913dcd60..282799e1660 100644
--- a/source/blender/draw/engines/overlay/shaders/outline_prepass_geom.glsl
+++ b/source/blender/draw/engines/overlay/shaders/outline_prepass_geom.glsl
@@ -3,9 +3,9 @@ layout(lines_adjacency) in;
 layout(line_strip, max_vertices = 2) out;
 
 in vec3 vPos[];
-in int objectId_g[];
+in uint objectId_g[];
 
-flat out int objectId;
+flat out uint objectId;
 
 void vert_from_gl_in(int v)
 {
diff --git a/source/blender/draw/engines/overlay/shaders/outline_prepass_vert.glsl b/source/blender/draw/engines/overlay/shaders/outline_prepass_vert.glsl
index 8b9854b2d3e..984e55b0c46 100644
--- a/source/blender/draw/engines/overlay/shaders/outline_prepass_vert.glsl
+++ b/source/blender/draw/engines/overlay/shaders/outline_prepass_vert.glsl
@@ -5,14 +5,14 @@ in vec3 pos;
 
 #ifdef USE_GEOM
 out vec3 vPos;
-out int objectId_g;
+out uint objectId_g;
 #  define objectId objectId_g
 #else
 
-flat out int objectId;
+flat out uint objectId;
 #endif
 
-int outline_colorid_get(void)
+uint outline_colorid_get(void)
 {
   int flag = int(abs(ObjectInfo.w));
   bool is_from_dupli = (flag & DRW_BASE_FROM_DUPLI) != 0;
@@ -20,24 +20,24 @@ int outline_colorid_get(void)
 
   if (is_from_dupli) {
     if (isTransform) {
-      return 0; /* colorTransform */
+      return 0u; /* colorTransform */
     }
     else {
-      return 2; /* colorDupliSelect */
+      return 2u; /* colorDupliSelect */
     }
   }
 
   if (isTransform) {
-    return 0; /* colorTransform */
+    return 0u; /* colorTransform */
   }
   else if (is_active) {
-    return 3; /* colorActive */
+    return 3u; /* colorActive */
   }
   else {
-    return 1; /* colorSelect */
+    return 1u; /* colorSelect */
   }
 
-  return 0;
+  return 0u;
 }
 
 /* Replace top 2 bits (of the 16bit output) by outlineId.
@@ -56,13 +56,13 @@ void main()
   gl_Position.z -= 1e-3;
 
   /* ID 0 is nothing (background) */
-  objectId = resource_handle + 1;
+  objectId = uint(resource_handle + 1);
 
   /* Should be 2 bits only [0..3]. */
-  int outline_id = outline_colorid_get();
+  uint outline_id = outline_colorid_get();
 
   /* Combine for 16bit uint target. */
-  objectId = (outline_id << 14) | ((objectId << SHIFT) >> SHIFT);
+  objectId = (outline_id << 14u) | ((objectId << SHIFT) >> SHIFT);
 
 #ifdef USE_WORLD_CLIP_PLANES
   world_clip_planes_calc_clip_distance(world_pos);



More information about the Bf-blender-cvs mailing list