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.)
This commit is contained in:
John Kessenich 2016-08-01 19:44:00 -06:00
parent 6c136223ed
commit f6640761c4
18 changed files with 408 additions and 308 deletions

View file

@ -125,12 +125,12 @@ ERROR: node is still EOpNull!
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 @@ 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 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 @@ ERROR: node is still EOpNull!
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 @@ ERROR: node is still EOpNull!
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 @@ ERROR: node is still EOpNull!
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 @@ ERROR: node is still EOpNull!
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 @@ ERROR: node is still EOpNull!
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 @@ 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 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 @@ ERROR: node is still EOpNull!
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 @@ ERROR: node is still EOpNull!
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 @@ ERROR: node is still EOpNull!
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 @@ ERROR: node is still EOpNull!
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: