From f5dcdf01230b504c340070d9938cd4b62b867f99 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Thu, 30 Jun 2016 16:46:24 -0600 Subject: [PATCH] Front-end: Don't lower precision of bit operations taking highp inputs. See issue #350 for detail. This may be an ESSL specification issue. --- Test/baseResults/300BuiltIns.frag.out | 8 ++-- Test/baseResults/310.vert.out | 40 ++++++++++---------- Test/baseResults/spv.intOps.vert.out | 8 ---- glslang/MachineIndependent/Initialize.cpp | 62 +++++++++++++++---------------- 4 files changed, 55 insertions(+), 63 deletions(-) diff --git a/Test/baseResults/300BuiltIns.frag.out b/Test/baseResults/300BuiltIns.frag.out index edcae46..c2f12c9 100644 --- a/Test/baseResults/300BuiltIns.frag.out +++ b/Test/baseResults/300BuiltIns.frag.out @@ -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) diff --git a/Test/baseResults/310.vert.out b/Test/baseResults/310.vert.out index b8b39f5..678c3e1 100644 --- a/Test/baseResults/310.vert.out +++ b/Test/baseResults/310.vert.out @@ -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: diff --git a/Test/baseResults/spv.intOps.vert.out b/Test/baseResults/spv.intOps.vert.out index 926ab7c..22451b9 100644 --- a/Test/baseResults/spv.intOps.vert.out +++ b/Test/baseResults/spv.intOps.vert.out @@ -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 diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index e8327c4..6de3a99 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -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"); } -- 2.7.4