Front-end: Don't lower precision of bit operations taking highp inputs.
authorJohn Kessenich <cepheus@frii.com>
Thu, 30 Jun 2016 22:46:24 +0000 (16:46 -0600)
committerJohn Kessenich <cepheus@frii.com>
Thu, 30 Jun 2016 22:46:24 +0000 (16:46 -0600)
See issue #350 for detail.  This may be an ESSL specification issue.

Test/baseResults/300BuiltIns.frag.out
Test/baseResults/310.vert.out
Test/baseResults/spv.intOps.vert.out
glslang/MachineIndependent/Initialize.cpp

index edcae46..c2f12c9 100644 (file)
@@ -161,9 +161,9 @@ ERROR: node is still EOpNull!
 0:62          packSnorm2x16 (global highp uint)
 0:62            'v2a' (global mediump 2-component vector of float)
 0:63      Sequence
-0:63        move second child to first child (temp highp 2-component vector of float)
+0:63        move second child to first child (temp mediump 2-component vector of float)
 0:63          'v20' (temp mediump 2-component vector of float)
-0:63          unpackSnorm2x16 (global highp 2-component vector of float)
+0:63          unpackSnorm2x16 (global mediump 2-component vector of float)
 0:63            'uy' (global mediump uint)
 0:64      Sequence
 0:64        move second child to first child (temp highp uint)
@@ -368,9 +368,9 @@ ERROR: node is still EOpNull!
 0:62          packSnorm2x16 (global highp uint)
 0:62            'v2a' (global mediump 2-component vector of float)
 0:63      Sequence
-0:63        move second child to first child (temp highp 2-component vector of float)
+0:63        move second child to first child (temp mediump 2-component vector of float)
 0:63          'v20' (temp mediump 2-component vector of float)
-0:63          unpackSnorm2x16 (global highp 2-component vector of float)
+0:63          unpackSnorm2x16 (global mediump 2-component vector of float)
 0:63            'uy' (global mediump uint)
 0:64      Sequence
 0:64        move second child to first child (temp highp uint)
index b8b39f5..678c3e1 100644 (file)
@@ -179,27 +179,27 @@ ERROR: node is still EOpNull!
 0:31          'u4' (temp highp 4-component vector of uint)
 0:32      move second child to first child (temp highp int)
 0:32        'i1' (temp highp int)
-0:32        bitCount (global lowp int)
+0:32        bitCount (global highp int)
 0:32          'i1' (temp highp int)
 0:33      move second child to first child (temp highp 3-component vector of int)
 0:33        'i3' (temp highp 3-component vector of int)
-0:33        bitCount (global lowp 3-component vector of int)
+0:33        bitCount (global highp 3-component vector of int)
 0:33          'u3' (temp highp 3-component vector of uint)
 0:34      move second child to first child (temp highp 2-component vector of int)
 0:34        'i2' (temp highp 2-component vector of int)
-0:34        findLSB (global lowp 2-component vector of int)
+0:34        findLSB (global highp 2-component vector of int)
 0:34          'i2' (temp highp 2-component vector of int)
 0:35      move second child to first child (temp highp 4-component vector of int)
 0:35        'i4' (temp highp 4-component vector of int)
-0:35        findLSB (global lowp 4-component vector of int)
+0:35        findLSB (global highp 4-component vector of int)
 0:35          'u4' (temp highp 4-component vector of uint)
 0:36      move second child to first child (temp highp int)
 0:36        'i1' (temp highp int)
-0:36        findMSB (global lowp int)
+0:36        findMSB (global highp int)
 0:36          'i1' (temp highp int)
 0:37      move second child to first child (temp highp 2-component vector of int)
 0:37        'i2' (temp highp 2-component vector of int)
-0:37        findMSB (global lowp 2-component vector of int)
+0:37        findMSB (global highp 2-component vector of int)
 0:37          'u2' (temp highp 2-component vector of uint)
 0:40      move second child to first child (temp highp 3-component vector of float)
 0:40        'v3' (temp highp 3-component vector of float)
@@ -219,13 +219,13 @@ ERROR: node is still EOpNull!
 0:46        'u1' (temp highp uint)
 0:46        PackSnorm4x8 (global highp uint)
 0:46          'v4' (temp mediump 4-component vector of float)
-0:47      move second child to first child (temp mediump 4-component vector of float)
+0:47      move second child to first child (temp highp 4-component vector of float)
 0:47        'v4' (temp mediump 4-component vector of float)
-0:47        UnpackUnorm4x8 (global mediump 4-component vector of float)
+0:47        UnpackUnorm4x8 (global highp 4-component vector of float)
 0:47          'u1' (temp highp uint)
-0:48      move second child to first child (temp mediump 4-component vector of float)
+0:48      move second child to first child (temp highp 4-component vector of float)
 0:48        'v4' (temp mediump 4-component vector of float)
-0:48        UnpackSnorm4x8 (global mediump 4-component vector of float)
+0:48        UnpackSnorm4x8 (global highp 4-component vector of float)
 0:48          'u1' (temp highp uint)
 0:60  Function Definition: foo( (global void)
 0:60    Function Parameters: 
@@ -1110,27 +1110,27 @@ ERROR: node is still EOpNull!
 0:31          'u4' (temp highp 4-component vector of uint)
 0:32      move second child to first child (temp highp int)
 0:32        'i1' (temp highp int)
-0:32        bitCount (global lowp int)
+0:32        bitCount (global highp int)
 0:32          'i1' (temp highp int)
 0:33      move second child to first child (temp highp 3-component vector of int)
 0:33        'i3' (temp highp 3-component vector of int)
-0:33        bitCount (global lowp 3-component vector of int)
+0:33        bitCount (global highp 3-component vector of int)
 0:33          'u3' (temp highp 3-component vector of uint)
 0:34      move second child to first child (temp highp 2-component vector of int)
 0:34        'i2' (temp highp 2-component vector of int)
-0:34        findLSB (global lowp 2-component vector of int)
+0:34        findLSB (global highp 2-component vector of int)
 0:34          'i2' (temp highp 2-component vector of int)
 0:35      move second child to first child (temp highp 4-component vector of int)
 0:35        'i4' (temp highp 4-component vector of int)
-0:35        findLSB (global lowp 4-component vector of int)
+0:35        findLSB (global highp 4-component vector of int)
 0:35          'u4' (temp highp 4-component vector of uint)
 0:36      move second child to first child (temp highp int)
 0:36        'i1' (temp highp int)
-0:36        findMSB (global lowp int)
+0:36        findMSB (global highp int)
 0:36          'i1' (temp highp int)
 0:37      move second child to first child (temp highp 2-component vector of int)
 0:37        'i2' (temp highp 2-component vector of int)
-0:37        findMSB (global lowp 2-component vector of int)
+0:37        findMSB (global highp 2-component vector of int)
 0:37          'u2' (temp highp 2-component vector of uint)
 0:40      move second child to first child (temp highp 3-component vector of float)
 0:40        'v3' (temp highp 3-component vector of float)
@@ -1150,13 +1150,13 @@ ERROR: node is still EOpNull!
 0:46        'u1' (temp highp uint)
 0:46        PackSnorm4x8 (global highp uint)
 0:46          'v4' (temp mediump 4-component vector of float)
-0:47      move second child to first child (temp mediump 4-component vector of float)
+0:47      move second child to first child (temp highp 4-component vector of float)
 0:47        'v4' (temp mediump 4-component vector of float)
-0:47        UnpackUnorm4x8 (global mediump 4-component vector of float)
+0:47        UnpackUnorm4x8 (global highp 4-component vector of float)
 0:47          'u1' (temp highp uint)
-0:48      move second child to first child (temp mediump 4-component vector of float)
+0:48      move second child to first child (temp highp 4-component vector of float)
 0:48        'v4' (temp mediump 4-component vector of float)
-0:48        UnpackSnorm4x8 (global mediump 4-component vector of float)
+0:48        UnpackSnorm4x8 (global highp 4-component vector of float)
 0:48          'u1' (temp highp uint)
 0:60  Function Definition: foo( (global void)
 0:60    Function Parameters: 
index 926ab7c..22451b9 100644 (file)
@@ -44,14 +44,6 @@ Linked vertex stage:
                               Name 173  "u3"
                               Name 182  "i3"
                               Name 247  "v4"
-                              Decorate 210 RelaxedPrecision
-                              Decorate 216 RelaxedPrecision
-                              Decorate 223 RelaxedPrecision
-                              Decorate 230 RelaxedPrecision
-                              Decorate 234 RelaxedPrecision
-                              Decorate 240 RelaxedPrecision
-                              Decorate 261 RelaxedPrecision
-                              Decorate 265 RelaxedPrecision
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
index e8327c4..6de3a99 100644 (file)
@@ -948,9 +948,9 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
         (profile != EEsProfile && version >= 420)) {
         commonBuiltins.append(
             "highp uint packSnorm2x16(vec2);"
-            "highp vec2 unpackSnorm2x16(highp uint);"
+            "      vec2 unpackSnorm2x16(highp uint);"
             "highp uint packHalf2x16(mediump vec2);"
-            "mediump vec2 unpackHalf2x16(highp uint);"
+            "      vec2 unpackHalf2x16(highp uint);"
             "\n");
     }
 
@@ -958,9 +958,9 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
         (profile != EEsProfile && version >= 400)) {
         commonBuiltins.append(
             "highp   uint packSnorm4x8  (mediump vec4);"
-            "mediump vec4 unpackSnorm4x8(highp   uint);"
+            "        vec4 unpackSnorm4x8(highp   uint);"
             "highp   uint packUnorm4x8  (mediump vec4);"
-            "mediump vec4 unpackUnorm4x8(highp   uint);"
+            "        vec4 unpackUnorm4x8(highp   uint);"
             "\n");
     }
 
@@ -1298,15 +1298,15 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "uvec3 bitfieldInsert(uvec3 base, uvec3, int, int);"
             "uvec4 bitfieldInsert(uvec4 base, uvec4, int, int);"
 
-            "lowp   int findLSB(  int);"
-            "lowp ivec2 findLSB(ivec2);"
-            "lowp ivec3 findLSB(ivec3);"
-            "lowp ivec4 findLSB(ivec4);"
+            "  int findLSB(  int);"
+            "ivec2 findLSB(ivec2);"
+            "ivec3 findLSB(ivec3);"
+            "ivec4 findLSB(ivec4);"
 
-            "lowp   int findLSB( uint);"
-            "lowp ivec2 findLSB(uvec2);"
-            "lowp ivec3 findLSB(uvec3);"
-            "lowp ivec4 findLSB(uvec4);"
+            "  int findLSB( uint);"
+            "ivec2 findLSB(uvec2);"
+            "ivec3 findLSB(uvec3);"
+            "ivec4 findLSB(uvec4);"
 
             "\n");
     }
@@ -1398,25 +1398,25 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "highp uvec3 bitfieldReverse(highp uvec3);"
             "highp uvec4 bitfieldReverse(highp uvec4);"
 
-            "lowp   int bitCount(  int);"
-            "lowp ivec2 bitCount(ivec2);"
-            "lowp ivec3 bitCount(ivec3);"
-            "lowp ivec4 bitCount(ivec4);"
-
-            "lowp   int bitCount( uint);"
-            "lowp ivec2 bitCount(uvec2);"
-            "lowp ivec3 bitCount(uvec3);"
-            "lowp ivec4 bitCount(uvec4);"
-
-            "lowp   int findMSB(highp   int);"
-            "lowp ivec2 findMSB(highp ivec2);"
-            "lowp ivec3 findMSB(highp ivec3);"
-            "lowp ivec4 findMSB(highp ivec4);"
-
-            "lowp   int findMSB(highp  uint);"
-            "lowp ivec2 findMSB(highp uvec2);"
-            "lowp ivec3 findMSB(highp uvec3);"
-            "lowp ivec4 findMSB(highp uvec4);"
+            "  int bitCount(  int);"
+            "ivec2 bitCount(ivec2);"
+            "ivec3 bitCount(ivec3);"
+            "ivec4 bitCount(ivec4);"
+
+            "  int bitCount( uint);"
+            "ivec2 bitCount(uvec2);"
+            "ivec3 bitCount(uvec3);"
+            "ivec4 bitCount(uvec4);"
+
+            "  int findMSB(highp   int);"
+            "ivec2 findMSB(highp ivec2);"
+            "ivec3 findMSB(highp ivec3);"
+            "ivec4 findMSB(highp ivec4);"
+
+            "  int findMSB(highp  uint);"
+            "ivec2 findMSB(highp uvec2);"
+            "ivec3 findMSB(highp uvec3);"
+            "ivec4 findMSB(highp uvec4);"
             
             "\n");
     }