Fix T58733: Segmentation fault at start causes by shader compillation
authorClément Foucault <foucault.clem@gmail.com>
Wed, 5 Dec 2018 01:15:06 +0000 (02:15 +0100)
committerClément Foucault <foucault.clem@gmail.com>
Wed, 5 Dec 2018 01:51:48 +0000 (02:51 +0100)
source/blender/draw/engines/workbench/shaders/workbench_common_lib.glsl

index 7aa41e1a53740f5646256d1d7e8baf8922a4c5d5..1b9b29b8ca2df51df6da00a8f6d1623f9387c4a2 100644 (file)
@@ -53,17 +53,17 @@ WB_Normal workbench_normal_encode(vec3 n)
 #endif /* WORKBENCH_ENCODE_NORMALS */
 
 /* Encoding into the alpha of a RGBA8 UNORM texture. */
-#define TARGET_BITCOUNT 8
-#define METALLIC_BITS 3 /* Metallic channel is less important. */
+#define TARGET_BITCOUNT 8u
+#define METALLIC_BITS 3u /* Metallic channel is less important. */
 #define ROUGHNESS_BITS (TARGET_BITCOUNT - METALLIC_BITS)
 #define TOTAL_BITS (METALLIC_BITS + ROUGHNESS_BITS)
 
 /* Encode 2 float into 1 with the desired precision. */
 float workbench_float_pair_encode(float v1, float v2)
 {
-       const int total_mask = ~(0xFFFFFFFF << TOTAL_BITS);
-       const int v1_mask = ~(0xFFFFFFFF << ROUGHNESS_BITS);
-       const int v2_mask = ~(0xFFFFFFFF << METALLIC_BITS);
+       const uint total_mask = ~(0xFFFFFFFFu << TOTAL_BITS);
+       const uint v1_mask = ~(0xFFFFFFFFu << ROUGHNESS_BITS);
+       const uint v2_mask = ~(0xFFFFFFFFu << METALLIC_BITS);
        int iv1 = int(v1 * float(v1_mask));
        int iv2 = int(v2 * float(v2_mask)) << ROUGHNESS_BITS;
        return float(iv1 | iv2) * (1.0 / float(total_mask));
@@ -71,10 +71,10 @@ float workbench_float_pair_encode(float v1, float v2)
 
 void workbench_float_pair_decode(float data, out float v1, out float v2)
 {
-       const int total_mask = ~(0xFFFFFFFF << TOTAL_BITS);
-       const int v1_mask = ~(0xFFFFFFFF << ROUGHNESS_BITS);
-       const int v2_mask = ~(0xFFFFFFFF << METALLIC_BITS);
-       int idata = int(data * float(total_mask));
+       const uint total_mask = ~(0xFFFFFFFFu << TOTAL_BITS);
+       const uint v1_mask = ~(0xFFFFFFFFu << ROUGHNESS_BITS);
+       const uint v2_mask = ~(0xFFFFFFFFu << METALLIC_BITS);
+       uint idata = uint(data * float(total_mask));
        v1 = float(idata & v1_mask) * (1.0 / float(v1_mask));
        v2 = float(idata >> ROUGHNESS_BITS) * (1.0 / float(v2_mask));
 }