Front-end: Implement 2nd task of issue #400; precision of result and operation.
From the ES spec + Bugzilla 15931 and GL_KHR_vulkan_glsl:
- Update precision qualifiers for all built-in function prototypes.
- Implement the new algorithm used to distinguish built-in function
operation precisions from result precisions.
Also add tracking of separate result and operation precisions, and
use that in generating SPIR-V.
(SPIR-V cares about precision of operation, while the front-end
cares about precision of result, for propagation.)
diff --git a/Test/baseResults/310.vert.out b/Test/baseResults/310.vert.out
index 678c3e1..84a50e8 100644
--- a/Test/baseResults/310.vert.out
+++ b/Test/baseResults/310.vert.out
@@ -125,12 +125,12 @@
0:17 'u1' (temp highp uint)
0:17 'u1' (temp highp uint)
0:17 'u1' (temp highp uint)
-0:19 uMulExtended (global void)
+0:19 uMulExtended (global highp void)
0:19 'u4' (temp highp 4-component vector of uint)
0:19 'u4' (temp highp 4-component vector of uint)
0:19 'u4' (temp highp 4-component vector of uint)
0:19 'u4' (temp highp 4-component vector of uint)
-0:21 iMulExtended (global void)
+0:21 iMulExtended (global highp void)
0:21 'i4' (temp highp 4-component vector of int)
0:21 'i4' (temp highp 4-component vector of int)
0:21 'i4' (temp highp 4-component vector of int)
@@ -179,27 +179,27 @@
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 highp int)
+0:32 bitCount (global lowp int, operation at highp)
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 highp 3-component vector of int)
+0:33 bitCount (global lowp 3-component vector of int, operation at highp)
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 highp 2-component vector of int)
+0:34 findLSB (global lowp 2-component vector of int, operation at highp)
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 highp 4-component vector of int)
+0:35 findLSB (global lowp 4-component vector of int, operation at highp)
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 highp int)
+0:36 findMSB (global lowp int, operation at highp)
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 highp 2-component vector of int)
+0:37 findMSB (global lowp 2-component vector of int, operation at highp)
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)
@@ -213,19 +213,19 @@
0:42 'i2' (temp highp 2-component vector of int)
0:45 move second child to first child (temp highp uint)
0:45 'u1' (temp highp uint)
-0:45 PackUnorm4x8 (global highp uint)
+0:45 PackUnorm4x8 (global highp uint, operation at mediump)
0:45 'v4' (temp mediump 4-component vector of float)
0:46 move second child to first child (temp highp uint)
0:46 'u1' (temp highp uint)
-0:46 PackSnorm4x8 (global highp uint)
+0:46 PackSnorm4x8 (global highp uint, operation at mediump)
0:46 'v4' (temp mediump 4-component vector of float)
-0:47 move second child to first child (temp highp 4-component vector of float)
+0:47 move second child to first child (temp mediump 4-component vector of float)
0:47 'v4' (temp mediump 4-component vector of float)
-0:47 UnpackUnorm4x8 (global highp 4-component vector of float)
+0:47 UnpackUnorm4x8 (global mediump 4-component vector of float, operation at highp)
0:47 'u1' (temp highp uint)
-0:48 move second child to first child (temp highp 4-component vector of float)
+0:48 move second child to first child (temp mediump 4-component vector of float)
0:48 'v4' (temp mediump 4-component vector of float)
-0:48 UnpackSnorm4x8 (global highp 4-component vector of float)
+0:48 UnpackSnorm4x8 (global mediump 4-component vector of float, operation at highp)
0:48 'u1' (temp highp uint)
0:60 Function Definition: foo( (global void)
0:60 Function Parameters:
@@ -340,7 +340,7 @@
0:165 0.100000
0:165 Convert float to int (temp lowp 2-component vector of int)
0:165 'inf' (in highp 2-component vector of float)
-0:166 textureGatherOffsets (global lowp 4-component vector of float)
+0:166 textureGatherOffsets (global lowp 4-component vector of float, operation at highp)
0:166 direct index (temp lowp sampler2D)
0:166 'sArray' (uniform 4-element array of lowp sampler2D)
0:166 Constant:
@@ -404,7 +404,7 @@
0:180 0.100000
0:180 Convert float to int (temp lowp 2-component vector of int)
0:180 'inf' (in highp 2-component vector of float)
-0:181 textureGatherOffsets (global lowp 4-component vector of float)
+0:181 textureGatherOffsets (global lowp 4-component vector of float, operation at highp)
0:181 direct index (temp lowp sampler2D)
0:181 'sArray' (uniform 4-element array of lowp sampler2D)
0:181 Constant:
@@ -421,7 +421,7 @@
0:181 0 (const int)
0:181 0 (const int)
0:181 0 (const int)
-0:182 textureGatherOffsets (global lowp 4-component vector of float)
+0:182 textureGatherOffsets (global lowp 4-component vector of float, operation at highp)
0:182 direct index (temp lowp sampler2D)
0:182 'sArray' (uniform 4-element array of lowp sampler2D)
0:182 Constant:
@@ -1056,12 +1056,12 @@
0:17 'u1' (temp highp uint)
0:17 'u1' (temp highp uint)
0:17 'u1' (temp highp uint)
-0:19 uMulExtended (global void)
+0:19 uMulExtended (global highp void)
0:19 'u4' (temp highp 4-component vector of uint)
0:19 'u4' (temp highp 4-component vector of uint)
0:19 'u4' (temp highp 4-component vector of uint)
0:19 'u4' (temp highp 4-component vector of uint)
-0:21 iMulExtended (global void)
+0:21 iMulExtended (global highp void)
0:21 'i4' (temp highp 4-component vector of int)
0:21 'i4' (temp highp 4-component vector of int)
0:21 'i4' (temp highp 4-component vector of int)
@@ -1110,27 +1110,27 @@
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 highp int)
+0:32 bitCount (global lowp int, operation at highp)
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 highp 3-component vector of int)
+0:33 bitCount (global lowp 3-component vector of int, operation at highp)
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 highp 2-component vector of int)
+0:34 findLSB (global lowp 2-component vector of int, operation at highp)
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 highp 4-component vector of int)
+0:35 findLSB (global lowp 4-component vector of int, operation at highp)
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 highp int)
+0:36 findMSB (global lowp int, operation at highp)
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 highp 2-component vector of int)
+0:37 findMSB (global lowp 2-component vector of int, operation at highp)
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)
@@ -1144,19 +1144,19 @@
0:42 'i2' (temp highp 2-component vector of int)
0:45 move second child to first child (temp highp uint)
0:45 'u1' (temp highp uint)
-0:45 PackUnorm4x8 (global highp uint)
+0:45 PackUnorm4x8 (global highp uint, operation at mediump)
0:45 'v4' (temp mediump 4-component vector of float)
0:46 move second child to first child (temp highp uint)
0:46 'u1' (temp highp uint)
-0:46 PackSnorm4x8 (global highp uint)
+0:46 PackSnorm4x8 (global highp uint, operation at mediump)
0:46 'v4' (temp mediump 4-component vector of float)
-0:47 move second child to first child (temp highp 4-component vector of float)
+0:47 move second child to first child (temp mediump 4-component vector of float)
0:47 'v4' (temp mediump 4-component vector of float)
-0:47 UnpackUnorm4x8 (global highp 4-component vector of float)
+0:47 UnpackUnorm4x8 (global mediump 4-component vector of float, operation at highp)
0:47 'u1' (temp highp uint)
-0:48 move second child to first child (temp highp 4-component vector of float)
+0:48 move second child to first child (temp mediump 4-component vector of float)
0:48 'v4' (temp mediump 4-component vector of float)
-0:48 UnpackSnorm4x8 (global highp 4-component vector of float)
+0:48 UnpackSnorm4x8 (global mediump 4-component vector of float, operation at highp)
0:48 'u1' (temp highp uint)
0:60 Function Definition: foo( (global void)
0:60 Function Parameters:
@@ -1271,7 +1271,7 @@
0:165 0.100000
0:165 Convert float to int (temp lowp 2-component vector of int)
0:165 'inf' (in highp 2-component vector of float)
-0:166 textureGatherOffsets (global lowp 4-component vector of float)
+0:166 textureGatherOffsets (global lowp 4-component vector of float, operation at highp)
0:166 direct index (temp lowp sampler2D)
0:166 'sArray' (uniform 4-element array of lowp sampler2D)
0:166 Constant:
@@ -1335,7 +1335,7 @@
0:180 0.100000
0:180 Convert float to int (temp lowp 2-component vector of int)
0:180 'inf' (in highp 2-component vector of float)
-0:181 textureGatherOffsets (global lowp 4-component vector of float)
+0:181 textureGatherOffsets (global lowp 4-component vector of float, operation at highp)
0:181 direct index (temp lowp sampler2D)
0:181 'sArray' (uniform 4-element array of lowp sampler2D)
0:181 Constant:
@@ -1352,7 +1352,7 @@
0:181 0 (const int)
0:181 0 (const int)
0:181 0 (const int)
-0:182 textureGatherOffsets (global lowp 4-component vector of float)
+0:182 textureGatherOffsets (global lowp 4-component vector of float, operation at highp)
0:182 direct index (temp lowp sampler2D)
0:182 'sArray' (uniform 4-element array of lowp sampler2D)
0:182 Constant: