From c96885f40586a5188d05d8ebffa9400f3bde9301 Mon Sep 17 00:00:00 2001 From: GregF Date: Fri, 9 Mar 2018 17:45:57 -0700 Subject: [PATCH 01/21] Update known_good to SPIR-V 1.3 support --- known_good.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/known_good.json b/known_good.json index 61d8507f..01b370ec 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "46a9ec9d2312bc8f2a87810614d06c721ea3121c" + "commit" : "8d8a71278bf9e83dd0fb30d5474386d30870b74d" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "ce309203d7eceaf908bea8862c27f3e0749f7d00" + "commit" : "02ffc719aa9f9c1dce5ce05743fb1afe6cbf17ea" } ] } From bfa64afb78017258b2056edc81bb36e1d1df7840 Mon Sep 17 00:00:00 2001 From: GregF Date: Fri, 9 Mar 2018 17:51:11 -0700 Subject: [PATCH 02/21] Increment minor version to 4 --- glslang/Public/ShaderLang.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 67cb3baa..3d87c0f2 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -70,7 +70,7 @@ // This should always increase, as some paths to do not consume // a more major number. // It should increment by one when new functionality is added. -#define GLSLANG_MINOR_VERSION 3 +#define GLSLANG_MINOR_VERSION 4 // // Call before doing any other compiler/linker operations. From b3e80f5aecea6855ffea52a26daa89a75286c990 Mon Sep 17 00:00:00 2001 From: Josh de Kock Date: Sun, 11 Mar 2018 19:48:48 +0000 Subject: [PATCH 03/21] include/Common.h: reorder includes to avoid redefinition on some platforms On some systems sstream defines snprintf, this leads to the a redefinition of sprintf_s if snprintf is defined before checking if it exists in sstream. --- glslang/Include/Common.h | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h index f7448fa0..f2fb10bf 100644 --- a/glslang/Include/Common.h +++ b/glslang/Include/Common.h @@ -37,21 +37,8 @@ #ifndef _COMMON_INCLUDED_ #define _COMMON_INCLUDED_ -#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || defined MINGW_HAS_SECURE_API - #include - #define snprintf sprintf_s - #define safe_vsprintf(buf,max,format,args) vsnprintf_s((buf), (max), (max), (format), (args)) -#elif defined (solaris) - #define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args)) - #include - #define UINT_PTR uintptr_t -#else - #define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args)) - #include - #define UINT_PTR uintptr_t -#endif -#if defined(__ANDROID__) || (defined(_MSC_VER) && _MSC_VER < 1700) +#if defined(__ANDROID__) || _MSC_VER < 1700 #include namespace std { template @@ -63,6 +50,22 @@ std::string to_string(const T& val) { } #endif +#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || defined MINGW_HAS_SECURE_API + #include + #ifndef snprintf + #define snprintf sprintf_s + #endif + #define safe_vsprintf(buf,max,format,args) vsnprintf_s((buf), (max), (max), (format), (args)) +#elif defined (solaris) + #define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args)) + #include + #define UINT_PTR uintptr_t +#else + #define safe_vsprintf(buf,max,format,args) vsnprintf((buf), (max), (format), (args)) + #include + #define UINT_PTR uintptr_t +#endif + #if defined(_MSC_VER) && _MSC_VER < 1800 inline long long int strtoll (const char* str, char** endptr, int base) { From a00e51b5b254096616bdaa5c3029055e77f65e78 Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Mon, 12 Mar 2018 23:15:11 +0800 Subject: [PATCH 04/21] HLSL: Correct some mistakes for min16 types - Add missing constructor ops to support float16/int16/uint16 types - Allow half float literals - Correct two errors of double literal parse in HLSL: extension check and postfix --- .../preprocessor/PpScanner.cpp | 24 +++++++++------ hlsl/hlslGrammar.cpp | 3 ++ hlsl/hlslParseHelper.cpp | 30 +++++++++++++++++++ hlsl/hlslScanContext.cpp | 1 + hlsl/hlslTokens.h | 1 + 5 files changed, 50 insertions(+), 9 deletions(-) diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp index 13e9c1d8..61bf027f 100644 --- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp +++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp @@ -174,16 +174,22 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) // Suffix: bool isFloat16 = false; if (ch == 'l' || ch == 'L') { - parseContext.doubleCheck(ppToken->loc, "double floating-point suffix"); + if (parseContext.intermediate.getSource() == EShSourceGlsl) + parseContext.doubleCheck(ppToken->loc, "double floating-point suffix"); if (! HasDecimalOrExponent) parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", ""); - int ch2 = getChar(); - if (ch2 != 'f' && ch2 != 'F') { - ungetChar(); - ungetChar(); - } else { + if (parseContext.intermediate.getSource() == EShSourceGlsl) { + int ch2 = getChar(); + if (ch2 != 'f' && ch2 != 'F') { + ungetChar(); + ungetChar(); + } else { + saveName(ch); + saveName(ch2); + isDouble = 1; + } + } else if (parseContext.intermediate.getSource() == EShSourceHlsl) { saveName(ch); - saveName(ch2); isDouble = 1; } } else if (ch == 'h' || ch == 'H') { @@ -201,9 +207,9 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) saveName(ch2); isFloat16 = true; } - } else { + } else if (parseContext.intermediate.getSource() == EShSourceHlsl) { saveName(ch); - isFloat16 = false; + isFloat16 = true; } } else if (ch == 'f' || ch == 'F') { parseContext.profileRequires(ppToken->loc, EEsProfile, 300, nullptr, "floating-point suffix"); diff --git a/hlsl/hlslGrammar.cpp b/hlsl/hlslGrammar.cpp index 38a61166..24ba4898 100755 --- a/hlsl/hlslGrammar.cpp +++ b/hlsl/hlslGrammar.cpp @@ -3283,6 +3283,9 @@ bool HlslGrammar::acceptLiteral(TIntermTyped*& node) case EHTokUintConstant: node = intermediate.addConstantUnion(token.u, token.loc, true); break; + case EHTokFloat16Constant: + node = intermediate.addConstantUnion(token.d, EbtFloat16, token.loc, true); + break; case EHTokFloatConstant: node = intermediate.addConstantUnion(token.d, EbtFloat, token.loc, true); break; diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index 73bda6d6..fbfc428e 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -8320,6 +8320,22 @@ TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op // First, convert types as needed. // switch (op) { + case EOpConstructF16Vec2: + case EOpConstructF16Vec3: + case EOpConstructF16Vec4: + case EOpConstructF16Mat2x2: + case EOpConstructF16Mat2x3: + case EOpConstructF16Mat2x4: + case EOpConstructF16Mat3x2: + case EOpConstructF16Mat3x3: + case EOpConstructF16Mat3x4: + case EOpConstructF16Mat4x2: + case EOpConstructF16Mat4x3: + case EOpConstructF16Mat4x4: + case EOpConstructFloat16: + basicOp = EOpConstructFloat16; + break; + case EOpConstructVec2: case EOpConstructVec3: case EOpConstructVec4: @@ -8352,6 +8368,13 @@ TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op basicOp = EOpConstructDouble; break; + case EOpConstructI16Vec2: + case EOpConstructI16Vec3: + case EOpConstructI16Vec4: + case EOpConstructInt16: + basicOp = EOpConstructInt16; + break; + case EOpConstructIVec2: case EOpConstructIVec3: case EOpConstructIVec4: @@ -8368,6 +8391,13 @@ TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op basicOp = EOpConstructInt; break; + case EOpConstructU16Vec2: + case EOpConstructU16Vec3: + case EOpConstructU16Vec4: + case EOpConstructUint16: + basicOp = EOpConstructUint16; + break; + case EOpConstructUVec2: case EOpConstructUVec3: case EOpConstructUVec4: diff --git a/hlsl/hlslScanContext.cpp b/hlsl/hlslScanContext.cpp index 06f76756..28a66bb4 100755 --- a/hlsl/hlslScanContext.cpp +++ b/hlsl/hlslScanContext.cpp @@ -550,6 +550,7 @@ EHlslTokenClass HlslScanContext::tokenizeClass(HlslToken& token) case PpAtomConstInt: parserToken->i = ppToken.ival; return EHTokIntConstant; case PpAtomConstUint: parserToken->i = ppToken.ival; return EHTokUintConstant; + case PpAtomConstFloat16: parserToken->d = ppToken.dval; return EHTokFloat16Constant; case PpAtomConstFloat: parserToken->d = ppToken.dval; return EHTokFloatConstant; case PpAtomConstDouble: parserToken->d = ppToken.dval; return EHTokDoubleConstant; case PpAtomIdentifier: diff --git a/hlsl/hlslTokens.h b/hlsl/hlslTokens.h index 9354ad92..4426bcce 100755 --- a/hlsl/hlslTokens.h +++ b/hlsl/hlslTokens.h @@ -298,6 +298,7 @@ enum EHlslTokenClass { EHTokConstantBuffer, // constant + EHTokFloat16Constant, EHTokFloatConstant, EHTokDoubleConstant, EHTokIntConstant, From eddb1318ae125d5d963bec1c00d762fa62a9529a Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Tue, 13 Mar 2018 10:57:59 +0100 Subject: [PATCH 05/21] Use the correct type for the constant for matrix/scalar division When a matrix is divided by a scalar it tries to take the reciprocal of the scalar to convert the operation into a multiply. However it was always doing this by making a 32-bit constant. If the scalar is a double then this would end up making an FDiv instruction with different types in the operands. This patch adds a helper method called makeFpConstant which makes a floating-point constant of the given type. The code to take the reciprocal now uses it to make the same type as the result. Fixes https://github.com/KhronosGroup/glslang/issues/1278 --- SPIRV/GlslangToSpv.cpp | 3 ++- SPIRV/SpvBuilder.cpp | 17 +++++++++++++++++ SPIRV/SpvBuilder.h | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 1527fec2..11257f08 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -4137,7 +4137,8 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Dec case spv::OpFDiv: if (builder.isMatrix(left) && builder.isScalar(right)) { // turn matrix / scalar into a multiply... - right = builder.createBinOp(spv::OpFDiv, builder.getTypeId(right), builder.makeFloatConstant(1.0F), right); + spv::Id resultType = builder.getTypeId(right); + right = builder.createBinOp(spv::OpFDiv, resultType, builder.makeFpConstant(resultType, 1.0), right); op = spv::OpMatrixTimesScalar; } else firstClass = false; diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 10d0d501..b509edde 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -848,6 +848,23 @@ Id Builder::makeFloat16Constant(float f16, bool specConstant) return c->getResultId(); } +Id Builder::makeFpConstant(Id type, double d, bool specConstant) +{ + assert(isFloatType(type)); + + switch (getScalarTypeWidth(type)) { + case 16: + return makeFloat16Constant(d, specConstant); + case 32: + return makeFloatConstant(d, specConstant); + case 64: + return makeDoubleConstant(d, specConstant); + } + + assert(false); +} + + Id Builder::findCompositeConstant(Op typeClass, const std::vector& comps) { Instruction* constant = 0; diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index d4d2719f..25495fb7 100755 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -226,6 +226,7 @@ public: Id makeFloatConstant(float f, bool specConstant = false); Id makeDoubleConstant(double d, bool specConstant = false); Id makeFloat16Constant(float f16, bool specConstant = false); + Id makeFpConstant(Id type, double d, bool specConstant = false); // Turn the array of constants into a proper spv constant of the requested type. Id makeCompositeConstant(Id type, const std::vector& comps, bool specConst = false); From 017a567be16437793de968361de0e50ec9cbb509 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Mon, 12 Mar 2018 15:12:38 +0000 Subject: [PATCH 06/21] Add support for GL_NV_shader_noperspective_interpolation --- Test/baseResults/300.frag.out | 2 +- Test/baseResults/310.frag.out | 2 +- Test/baseResults/310.tese.out | 2 +- Test/baseResults/320.frag.out | 2 +- Test/baseResults/320.tese.out | 2 +- glslang/MachineIndependent/Scan.cpp | 7 +- glslang/MachineIndependent/Versions.cpp | 8 + glslang/MachineIndependent/Versions.h | 1 + glslang/MachineIndependent/glslang.y | 4 + glslang/MachineIndependent/glslang_tab.cpp | 2153 +++++++++--------- glslang/MachineIndependent/glslang_tab.cpp.h | 8 +- 11 files changed, 1118 insertions(+), 1073 deletions(-) diff --git a/Test/baseResults/300.frag.out b/Test/baseResults/300.frag.out index 63abec1a..b2051ed9 100644 --- a/Test/baseResults/300.frag.out +++ b/Test/baseResults/300.frag.out @@ -1,7 +1,7 @@ 300.frag ERROR: 0:2: 'float' : type requires declaration of default precision qualifier ERROR: 0:30: 'noperspective' : Reserved word. -ERROR: 0:30: 'noperspective' : not supported with this profile: es +ERROR: 0:30: 'noperspective' : not supported for this version or the enabled extensions ERROR: 0:31: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: bads ERROR: 0:32: 'uint' : cannot apply precision statement to this type; use 'float', 'int' or a sampler type ERROR: 0:39: 'structure' : must be qualified as flat in diff --git a/Test/baseResults/310.frag.out b/Test/baseResults/310.frag.out index 81075561..cb02cd8a 100644 --- a/Test/baseResults/310.frag.out +++ b/Test/baseResults/310.frag.out @@ -105,7 +105,7 @@ ERROR: 0:346: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragm ERROR: 0:347: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output ERROR: 0:348: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output ERROR: 0:349: 'noperspective' : Reserved word. -ERROR: 0:349: 'noperspective' : not supported with this profile: es +ERROR: 0:349: 'noperspective' : not supported for this version or the enabled extensions ERROR: 0:349: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output ERROR: 0:355: 'interpolateAtCentroid' : required extension not requested: GL_OES_shader_multisample_interpolation ERROR: 0:356: 'interpolateAtSample' : required extension not requested: GL_OES_shader_multisample_interpolation diff --git a/Test/baseResults/310.tese.out b/Test/baseResults/310.tese.out index 52d19b4f..28cf96b3 100644 --- a/Test/baseResults/310.tese.out +++ b/Test/baseResults/310.tese.out @@ -21,7 +21,7 @@ ERROR: 0:48: 'assign' : l-value required (can't modify a const) ERROR: 0:51: 'patch' : cannot use interpolation qualifiers with patch ERROR: 0:52: 'patch' : cannot use interpolation qualifiers with patch ERROR: 0:53: 'noperspective' : Reserved word. -ERROR: 0:53: 'noperspective' : not supported with this profile: es +ERROR: 0:53: 'noperspective' : not supported for this version or the enabled extensions ERROR: 0:53: 'patch' : cannot use interpolation qualifiers with patch ERROR: 0:54: 'sample' : Reserved word. ERROR: 0:54: '' : can only have one auxiliary qualifier (centroid, patch, and sample) diff --git a/Test/baseResults/320.frag.out b/Test/baseResults/320.frag.out index 76dbeaf8..33c74e50 100755 --- a/Test/baseResults/320.frag.out +++ b/Test/baseResults/320.frag.out @@ -23,7 +23,7 @@ ERROR: 0:157: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragm ERROR: 0:158: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output ERROR: 0:159: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output ERROR: 0:160: 'noperspective' : Reserved word. -ERROR: 0:160: 'noperspective' : not supported with this profile: es +ERROR: 0:160: 'noperspective' : not supported for this version or the enabled extensions ERROR: 0:160: 'flat/smooth/noperspective' : can't use interpolation qualifier on a fragment output ERROR: 0:165: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output ERROR: 0:180: 'interpolateAtCentroid' : no matching overloaded function found diff --git a/Test/baseResults/320.tese.out b/Test/baseResults/320.tese.out index ad8fe72e..c72ce33f 100755 --- a/Test/baseResults/320.tese.out +++ b/Test/baseResults/320.tese.out @@ -21,7 +21,7 @@ ERROR: 0:44: 'assign' : l-value required (can't modify a const) ERROR: 0:47: 'patch' : cannot use interpolation qualifiers with patch ERROR: 0:48: 'patch' : cannot use interpolation qualifiers with patch ERROR: 0:49: 'noperspective' : Reserved word. -ERROR: 0:49: 'noperspective' : not supported with this profile: es +ERROR: 0:49: 'noperspective' : not supported for this version or the enabled extensions ERROR: 0:49: 'patch' : cannot use interpolation qualifiers with patch ERROR: 0:50: '' : can only have one auxiliary qualifier (centroid, patch, and sample) ERROR: 0:54: 'gl_PerVertex' : block already declared with size, can't redeclare as implicitly-sized diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp index 92824efa..feb9bed9 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -962,7 +962,7 @@ int TScanContext::tokenizeIdentifier() case PATCH: if (parseContext.symbolTable.atBuiltInLevel() || (parseContext.profile == EEsProfile && - (parseContext.version >= 320 || + (parseContext.version >= 320 || parseContext.extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))) || (parseContext.profile != EEsProfile && parseContext.extensionTurnedOn(E_GL_ARB_tessellation_shader))) return keyword; @@ -1450,6 +1450,11 @@ int TScanContext::tokenizeIdentifier() #endif case NOPERSPECTIVE: +#ifdef NV_EXTENSIONS + if (parseContext.profile == EEsProfile && parseContext.version >= 300 && + parseContext.extensionTurnedOn(E_GL_NV_shader_noperspective_interpolation)) + return keyword; +#endif return es30ReservedFromGLSL(130); case SMOOTH: diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 1f44cc3e..a9e81a74 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -225,6 +225,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_NVX_multiview_per_view_attributes] = EBhDisable; extensionBehavior[E_GL_NV_shader_atomic_int64] = EBhDisable; extensionBehavior[E_GL_NV_conservative_raster_underestimation] = EBhDisable; + extensionBehavior[E_GL_NV_shader_noperspective_interpolation] = EBhDisable; #endif // AEP @@ -319,6 +320,13 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_OES_texture_cube_map_array 1\n" "#define GL_EXT_shader_non_constant_global_initializers 1\n" ; + +#ifdef NV_EXTENSIONS + if (profile == EEsProfile && version >= 300) { + preamble += "#define GL_NV_shader_noperspective_interpolation 1\n"; + } +#endif + } else { preamble = "#define GL_FRAGMENT_PRECISION_HIGH 1\n" diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index c9f4e3e4..9a7d9ca2 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -196,6 +196,7 @@ const char* const E_GL_NV_stereo_view_rendering = "GL_NV_stereo_ const char* const E_GL_NVX_multiview_per_view_attributes = "GL_NVX_multiview_per_view_attributes"; const char* const E_GL_NV_shader_atomic_int64 = "GL_NV_shader_atomic_int64"; const char* const E_GL_NV_conservative_raster_underestimation = "GL_NV_conservative_raster_underestimation"; +const char* const E_GL_NV_shader_noperspective_interpolation = "GL_NV_shader_noperspective_interpolation"; // Arrays of extensions for the above viewportEXTs duplications diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index 909871e2..0e213989 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -1117,7 +1117,11 @@ interpolation_qualifier } | NOPERSPECTIVE { parseContext.globalCheck($1.loc, "noperspective"); +#ifdef NV_EXTENSIONS + parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective"); +#else parseContext.requireProfile($1.loc, ~EEsProfile, "noperspective"); +#endif parseContext.profileRequires($1.loc, ENoProfile, 130, 0, "noperspective"); $$.init($1.loc); $$.qualifier.nopersp = true; diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index db5b28e1..2d844c19 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.0. */ +/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -44,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0" +#define YYBISON_VERSION "3.0.4" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -90,11 +90,11 @@ using namespace glslang; #line 92 "MachineIndependent/glslang_tab.cpp" /* yacc.c:339 */ -# ifndef YY_NULL +# ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULL nullptr +# define YY_NULLPTR nullptr # else -# define YY_NULL 0 +# define YY_NULLPTR 0 # endif # endif @@ -515,7 +515,7 @@ extern int yydebug; /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE YYSTYPE; + union YYSTYPE { #line 70 "MachineIndependent/glslang.y" /* yacc.c:355 */ @@ -555,6 +555,8 @@ union YYSTYPE #line 557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355 */ }; + +typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif @@ -582,7 +584,7 @@ int yyparse (glslang::TParseContext* pParseContext); extern int yylex(YYSTYPE*, TParseContext&); -#line 586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358 */ +#line 588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358 */ #ifdef short # undef short @@ -639,11 +641,30 @@ typedef short int yytype_int16; # endif #endif -#ifndef __attribute__ -/* This feature is available in gcc versions 2.5 and later. */ -# if (! defined __GNUC__ || __GNUC__ < 2 \ - || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)) -# define __attribute__(Spec) /* empty */ +#ifndef YY_ATTRIBUTE +# if (defined __GNUC__ \ + && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ + || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C +# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +# else +# define YY_ATTRIBUTE(Spec) /* empty */ +# endif +#endif + +#ifndef YY_ATTRIBUTE_PURE +# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +#endif + +#if !defined _Noreturn \ + && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) +# if defined _MSC_VER && 1200 <= _MSC_VER +# define _Noreturn __declspec (noreturn) +# else +# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) # endif #endif @@ -912,49 +933,49 @@ static const yytype_uint16 yyrline[] = 817, 826, 826, 837, 841, 848, 855, 858, 865, 873, 893, 916, 931, 954, 965, 975, 985, 995, 1004, 1007, 1011, 1015, 1020, 1028, 1033, 1038, 1043, 1048, 1057, 1068, - 1095, 1104, 1111, 1118, 1125, 1137, 1143, 1146, 1153, 1157, - 1161, 1169, 1178, 1181, 1192, 1195, 1198, 1202, 1206, 1210, - 1217, 1221, 1233, 1247, 1252, 1258, 1264, 1271, 1277, 1282, - 1287, 1292, 1300, 1304, 1308, 1312, 1316, 1320, 1326, 1335, - 1338, 1346, 1350, 1359, 1364, 1372, 1376, 1386, 1390, 1394, - 1399, 1404, 1409, 1414, 1418, 1423, 1428, 1433, 1438, 1443, - 1448, 1453, 1458, 1463, 1467, 1472, 1477, 1482, 1488, 1494, - 1500, 1506, 1512, 1518, 1524, 1530, 1536, 1542, 1548, 1554, - 1559, 1564, 1569, 1574, 1579, 1584, 1590, 1596, 1602, 1608, - 1614, 1620, 1626, 1632, 1638, 1644, 1650, 1656, 1662, 1668, - 1674, 1680, 1686, 1692, 1698, 1704, 1710, 1716, 1722, 1728, - 1734, 1740, 1746, 1751, 1756, 1761, 1766, 1771, 1776, 1781, - 1786, 1791, 1796, 1801, 1806, 1812, 1818, 1824, 1830, 1836, - 1842, 1848, 1854, 1860, 1866, 1872, 1878, 1884, 1890, 1896, - 1902, 1908, 1914, 1920, 1926, 1932, 1938, 1944, 1950, 1956, - 1962, 1968, 1974, 1980, 1986, 1992, 1998, 2004, 2010, 2016, - 2022, 2028, 2034, 2040, 2046, 2052, 2058, 2064, 2070, 2076, - 2082, 2088, 2094, 2099, 2104, 2109, 2114, 2119, 2124, 2129, - 2134, 2139, 2144, 2149, 2154, 2159, 2164, 2172, 2180, 2188, - 2196, 2204, 2212, 2220, 2228, 2236, 2244, 2252, 2260, 2268, - 2273, 2278, 2283, 2288, 2293, 2298, 2303, 2308, 2313, 2318, - 2323, 2328, 2333, 2338, 2343, 2348, 2356, 2364, 2369, 2374, - 2379, 2387, 2392, 2397, 2402, 2410, 2415, 2420, 2425, 2433, - 2438, 2443, 2448, 2453, 2458, 2466, 2471, 2479, 2484, 2492, - 2497, 2505, 2510, 2518, 2523, 2531, 2536, 2544, 2549, 2554, - 2559, 2564, 2569, 2574, 2579, 2584, 2589, 2594, 2599, 2604, - 2609, 2614, 2619, 2627, 2632, 2637, 2642, 2650, 2655, 2660, - 2665, 2673, 2678, 2683, 2688, 2696, 2701, 2706, 2711, 2719, - 2724, 2729, 2734, 2742, 2747, 2752, 2757, 2765, 2770, 2775, - 2780, 2788, 2793, 2798, 2803, 2811, 2816, 2821, 2826, 2834, - 2839, 2844, 2849, 2857, 2862, 2867, 2872, 2880, 2885, 2890, - 2895, 2903, 2908, 2913, 2918, 2926, 2931, 2936, 2941, 2949, - 2954, 2959, 2965, 2971, 2977, 2986, 2995, 3001, 3007, 3013, - 3019, 3024, 3040, 3045, 3050, 3058, 3058, 3069, 3069, 3079, - 3082, 3095, 3113, 3137, 3141, 3147, 3152, 3163, 3166, 3172, - 3181, 3184, 3190, 3194, 3195, 3201, 3202, 3203, 3204, 3205, - 3206, 3207, 3211, 3212, 3216, 3212, 3228, 3229, 3233, 3233, - 3240, 3240, 3254, 3257, 3265, 3273, 3284, 3285, 3289, 3292, - 3298, 3305, 3309, 3317, 3321, 3334, 3337, 3343, 3343, 3363, - 3366, 3372, 3384, 3396, 3399, 3405, 3405, 3420, 3420, 3436, - 3436, 3457, 3460, 3466, 3469, 3475, 3479, 3486, 3491, 3496, - 3503, 3506, 3515, 3519, 3528, 3531, 3534, 3542, 3542, 3564, - 3570, 3573, 3578, 3581 + 1095, 1104, 1111, 1118, 1129, 1141, 1147, 1150, 1157, 1161, + 1165, 1173, 1182, 1185, 1196, 1199, 1202, 1206, 1210, 1214, + 1221, 1225, 1237, 1251, 1256, 1262, 1268, 1275, 1281, 1286, + 1291, 1296, 1304, 1308, 1312, 1316, 1320, 1324, 1330, 1339, + 1342, 1350, 1354, 1363, 1368, 1376, 1380, 1390, 1394, 1398, + 1403, 1408, 1413, 1418, 1422, 1427, 1432, 1437, 1442, 1447, + 1452, 1457, 1462, 1467, 1471, 1476, 1481, 1486, 1492, 1498, + 1504, 1510, 1516, 1522, 1528, 1534, 1540, 1546, 1552, 1558, + 1563, 1568, 1573, 1578, 1583, 1588, 1594, 1600, 1606, 1612, + 1618, 1624, 1630, 1636, 1642, 1648, 1654, 1660, 1666, 1672, + 1678, 1684, 1690, 1696, 1702, 1708, 1714, 1720, 1726, 1732, + 1738, 1744, 1750, 1755, 1760, 1765, 1770, 1775, 1780, 1785, + 1790, 1795, 1800, 1805, 1810, 1816, 1822, 1828, 1834, 1840, + 1846, 1852, 1858, 1864, 1870, 1876, 1882, 1888, 1894, 1900, + 1906, 1912, 1918, 1924, 1930, 1936, 1942, 1948, 1954, 1960, + 1966, 1972, 1978, 1984, 1990, 1996, 2002, 2008, 2014, 2020, + 2026, 2032, 2038, 2044, 2050, 2056, 2062, 2068, 2074, 2080, + 2086, 2092, 2098, 2103, 2108, 2113, 2118, 2123, 2128, 2133, + 2138, 2143, 2148, 2153, 2158, 2163, 2168, 2176, 2184, 2192, + 2200, 2208, 2216, 2224, 2232, 2240, 2248, 2256, 2264, 2272, + 2277, 2282, 2287, 2292, 2297, 2302, 2307, 2312, 2317, 2322, + 2327, 2332, 2337, 2342, 2347, 2352, 2360, 2368, 2373, 2378, + 2383, 2391, 2396, 2401, 2406, 2414, 2419, 2424, 2429, 2437, + 2442, 2447, 2452, 2457, 2462, 2470, 2475, 2483, 2488, 2496, + 2501, 2509, 2514, 2522, 2527, 2535, 2540, 2548, 2553, 2558, + 2563, 2568, 2573, 2578, 2583, 2588, 2593, 2598, 2603, 2608, + 2613, 2618, 2623, 2631, 2636, 2641, 2646, 2654, 2659, 2664, + 2669, 2677, 2682, 2687, 2692, 2700, 2705, 2710, 2715, 2723, + 2728, 2733, 2738, 2746, 2751, 2756, 2761, 2769, 2774, 2779, + 2784, 2792, 2797, 2802, 2807, 2815, 2820, 2825, 2830, 2838, + 2843, 2848, 2853, 2861, 2866, 2871, 2876, 2884, 2889, 2894, + 2899, 2907, 2912, 2917, 2922, 2930, 2935, 2940, 2945, 2953, + 2958, 2963, 2969, 2975, 2981, 2990, 2999, 3005, 3011, 3017, + 3023, 3028, 3044, 3049, 3054, 3062, 3062, 3073, 3073, 3083, + 3086, 3099, 3117, 3141, 3145, 3151, 3156, 3167, 3170, 3176, + 3185, 3188, 3194, 3198, 3199, 3205, 3206, 3207, 3208, 3209, + 3210, 3211, 3215, 3216, 3220, 3216, 3232, 3233, 3237, 3237, + 3244, 3244, 3258, 3261, 3269, 3277, 3288, 3289, 3293, 3296, + 3302, 3309, 3313, 3321, 3325, 3338, 3341, 3347, 3347, 3367, + 3370, 3376, 3388, 3400, 3403, 3409, 3409, 3424, 3424, 3440, + 3440, 3461, 3464, 3470, 3473, 3479, 3483, 3490, 3495, 3500, + 3507, 3510, 3519, 3523, 3532, 3535, 3538, 3546, 3546, 3568, + 3574, 3577, 3582, 3585 }; #endif @@ -1080,7 +1101,7 @@ static const char *const yytname[] = "for_init_statement", "conditionopt", "for_rest_statement", "jump_statement", "translation_unit", "external_declaration", "function_definition", "$@13", "attribute", "attribute_list", - "single_attribute", YY_NULL + "single_attribute", YY_NULLPTR }; #endif @@ -3581,11 +3602,11 @@ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); + YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ - const char *yyformat = YY_NULL; + const char *yyformat = YY_NULLPTR; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per @@ -3642,7 +3663,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); + YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; @@ -3983,7 +4004,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string); } -#line 3987 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 3: @@ -3991,7 +4012,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 3995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 4: @@ -4000,7 +4021,7 @@ yyreduce: parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 4004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4025 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 5: @@ -4009,7 +4030,7 @@ yyreduce: parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 4013 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 6: @@ -4017,7 +4038,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 4021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 7: @@ -4026,7 +4047,7 @@ yyreduce: parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 4030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4051 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 8: @@ -4035,7 +4056,7 @@ yyreduce: parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true); } -#line 4039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 9: @@ -4044,7 +4065,7 @@ yyreduce: parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true); } -#line 4048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4069 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 10: @@ -4053,7 +4074,7 @@ yyreduce: parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 4057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 11: @@ -4062,7 +4083,7 @@ yyreduce: parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 4066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 12: @@ -4070,7 +4091,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 4074 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 13: @@ -4079,7 +4100,7 @@ yyreduce: parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true); } -#line 4083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 14: @@ -4088,7 +4109,7 @@ yyreduce: parseContext.float16Check((yyvsp[0].lex).loc, "half float literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true); } -#line 4092 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4113 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 15: @@ -4096,7 +4117,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 4100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 16: @@ -4106,7 +4127,7 @@ yyreduce: if ((yyval.interm.intermTypedNode)->getAsConstantUnion()) (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } -#line 4110 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4131 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 17: @@ -4114,7 +4135,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4118 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 18: @@ -4122,7 +4143,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode)); } -#line 4126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 19: @@ -4130,7 +4151,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 20: @@ -4138,7 +4159,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string); } -#line 4142 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 21: @@ -4148,7 +4169,7 @@ yyreduce: parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode)); } -#line 4152 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 22: @@ -4158,7 +4179,7 @@ yyreduce: parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode)); } -#line 4162 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 23: @@ -4167,7 +4188,7 @@ yyreduce: parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]"); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4192 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 24: @@ -4176,7 +4197,7 @@ yyreduce: (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode); delete (yyvsp[0].interm).function; } -#line 4180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 25: @@ -4184,7 +4205,7 @@ yyreduce: { (yyval.interm) = (yyvsp[0].interm); } -#line 4188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 26: @@ -4193,7 +4214,7 @@ yyreduce: (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4218 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 27: @@ -4202,7 +4223,7 @@ yyreduce: (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4227 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 28: @@ -4210,7 +4231,7 @@ yyreduce: { (yyval.interm) = (yyvsp[-1].interm); } -#line 4214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4235 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 29: @@ -4218,7 +4239,7 @@ yyreduce: { (yyval.interm) = (yyvsp[0].interm); } -#line 4222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 30: @@ -4230,7 +4251,7 @@ yyreduce: (yyval.interm).function = (yyvsp[-1].interm).function; (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); } -#line 4234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 31: @@ -4242,7 +4263,7 @@ yyreduce: (yyval.interm).function = (yyvsp[-2].interm).function; (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); } -#line 4246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4267 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 32: @@ -4250,7 +4271,7 @@ yyreduce: { (yyval.interm) = (yyvsp[-1].interm); } -#line 4254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 33: @@ -4260,7 +4281,7 @@ yyreduce: (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 4264 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4285 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 34: @@ -4292,7 +4313,7 @@ yyreduce: (yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull); } } -#line 4296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 35: @@ -4303,7 +4324,7 @@ yyreduce: if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode()) parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), ""); } -#line 4307 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4328 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 36: @@ -4312,7 +4333,7 @@ yyreduce: parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode)); } -#line 4316 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 37: @@ -4321,7 +4342,7 @@ yyreduce: parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode)); } -#line 4325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 38: @@ -4342,38 +4363,38 @@ yyreduce: (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } } -#line 4346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 39: #line 513 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } -#line 4352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4373 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 40: #line 514 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } -#line 4358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4379 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 41: #line 515 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } -#line 4364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 42: #line 516 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot; parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); } -#line 4371 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 43: #line 522 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4377 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 44: @@ -4383,7 +4404,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 45: @@ -4393,7 +4414,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 46: @@ -4404,13 +4425,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 47: #line 542 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 48: @@ -4420,7 +4441,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 49: @@ -4430,13 +4451,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 50: #line 556 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 51: @@ -4447,7 +4468,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4472 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 52: @@ -4458,13 +4479,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4462 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4483 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 53: #line 572 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 54: @@ -4474,7 +4495,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4499 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 55: @@ -4484,7 +4505,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4488 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4509 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 56: @@ -4494,7 +4515,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 57: @@ -4504,13 +4525,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 58: #line 596 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4514 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 59: @@ -4523,7 +4544,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4548 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 60: @@ -4536,13 +4557,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 61: #line 616 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 62: @@ -4553,13 +4574,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 63: #line 626 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 64: @@ -4570,13 +4591,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4574 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 65: #line 636 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 66: @@ -4587,13 +4608,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 67: #line 646 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 68: @@ -4603,13 +4624,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 69: #line 655 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4634 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 70: @@ -4619,13 +4640,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4623 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4644 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 71: #line 664 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 72: @@ -4635,13 +4656,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4660 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 73: #line 673 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 74: @@ -4649,7 +4670,7 @@ yyreduce: { ++parseContext.controlFlowNestingLevel; } -#line 4653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4674 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 75: @@ -4666,13 +4687,13 @@ yyreduce: (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 4670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 76: #line 692 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 77: @@ -4689,7 +4710,7 @@ yyreduce: (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } -#line 4693 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 78: @@ -4698,7 +4719,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAssign; } -#line 4702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4723 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 79: @@ -4707,7 +4728,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpMulAssign; } -#line 4711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 80: @@ -4716,7 +4737,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpDivAssign; } -#line 4720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 81: @@ -4726,7 +4747,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpModAssign; } -#line 4730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 82: @@ -4735,7 +4756,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAddAssign; } -#line 4739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 83: @@ -4744,7 +4765,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpSubAssign; } -#line 4748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 84: @@ -4753,7 +4774,7 @@ yyreduce: parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign; } -#line 4757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 85: @@ -4762,7 +4783,7 @@ yyreduce: parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign; } -#line 4766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4787 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 86: @@ -4771,7 +4792,7 @@ yyreduce: parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign; } -#line 4775 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 87: @@ -4780,7 +4801,7 @@ yyreduce: parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign; } -#line 4784 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 88: @@ -4789,7 +4810,7 @@ yyreduce: parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign; } -#line 4793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 89: @@ -4797,7 +4818,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4822 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 90: @@ -4810,7 +4831,7 @@ yyreduce: (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 4814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4835 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 91: @@ -4819,7 +4840,7 @@ yyreduce: parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), ""); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4844 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 92: @@ -4829,7 +4850,7 @@ yyreduce: (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 4833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 93: @@ -4839,7 +4860,7 @@ yyreduce: (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence); (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode; } -#line 4843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 94: @@ -4852,7 +4873,7 @@ yyreduce: parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision); (yyval.interm.intermNode) = 0; } -#line 4856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 95: @@ -4861,7 +4882,7 @@ yyreduce: parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList); (yyval.interm.intermNode) = 0; } -#line 4865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 96: @@ -4870,7 +4891,7 @@ yyreduce: parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 4874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 97: @@ -4879,7 +4900,7 @@ yyreduce: parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes); (yyval.interm.intermNode) = 0; } -#line 4883 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 98: @@ -4889,7 +4910,7 @@ yyreduce: parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type)); (yyval.interm.intermNode) = 0; } -#line 4893 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 99: @@ -4899,7 +4920,7 @@ yyreduce: parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 4903 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 100: @@ -4910,13 +4931,13 @@ yyreduce: parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList)); (yyval.interm.intermNode) = 0; } -#line 4914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 101: #line 826 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } -#line 4920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 102: @@ -4930,7 +4951,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[-5].interm.type).loc; (yyval.interm).typeList = (yyvsp[-1].interm.typeList); } -#line 4934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 103: @@ -4939,7 +4960,7 @@ yyreduce: (yyval.interm.identifierList) = new TIdentifierList; (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 4943 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4964 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 104: @@ -4948,7 +4969,7 @@ yyreduce: (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList); (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 4952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 105: @@ -4957,7 +4978,7 @@ yyreduce: (yyval.interm).function = (yyvsp[-1].interm.function); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 106: @@ -4965,7 +4986,7 @@ yyreduce: { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 4969 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 107: @@ -4973,7 +4994,7 @@ yyreduce: { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 4977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4998 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 108: @@ -4986,7 +5007,7 @@ yyreduce: else delete (yyvsp[0].interm).param.type; } -#line 4990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5011 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 109: @@ -5008,7 +5029,7 @@ yyreduce: (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param); } } -#line 5012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5033 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 110: @@ -5032,7 +5053,7 @@ yyreduce: function = new TFunction((yyvsp[-1].lex).string, type); (yyval.interm.function) = function; } -#line 5036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 111: @@ -5052,7 +5073,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).param = param; } -#line 5056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 112: @@ -5074,7 +5095,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).param = param; } -#line 5078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 113: @@ -5090,7 +5111,7 @@ yyreduce: parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 5094 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 114: @@ -5102,7 +5123,7 @@ yyreduce: parseContext.paramCheckFix((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type); parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier()); } -#line 5106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5127 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 115: @@ -5117,7 +5138,7 @@ yyreduce: parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type); parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 5121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5142 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 116: @@ -5129,7 +5150,7 @@ yyreduce: parseContext.paramCheckFix((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type); parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier()); } -#line 5133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5154 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 117: @@ -5140,7 +5161,7 @@ yyreduce: if ((yyvsp[0].interm.type).arraySizes) parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes); } -#line 5144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5165 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 118: @@ -5148,7 +5169,7 @@ yyreduce: { (yyval.interm) = (yyvsp[0].interm); } -#line 5152 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 119: @@ -5157,7 +5178,7 @@ yyreduce: (yyval.interm) = (yyvsp[-2].interm); parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type); } -#line 5161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5182 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 120: @@ -5166,7 +5187,7 @@ yyreduce: (yyval.interm) = (yyvsp[-3].interm); parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes); } -#line 5170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5191 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 121: @@ -5176,7 +5197,7 @@ yyreduce: TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode)); (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc); } -#line 5180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 122: @@ -5186,7 +5207,7 @@ yyreduce: TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode)); (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc); } -#line 5190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 123: @@ -5196,7 +5217,7 @@ yyreduce: (yyval.interm).intermNode = 0; parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type); } -#line 5200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 124: @@ -5206,7 +5227,7 @@ yyreduce: (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type)); } -#line 5210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5231 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 125: @@ -5216,7 +5237,7 @@ yyreduce: (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes); } -#line 5220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 126: @@ -5226,7 +5247,7 @@ yyreduce: TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode)); (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc); } -#line 5230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5251 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 127: @@ -5236,7 +5257,7 @@ yyreduce: TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode)); (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc); } -#line 5240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 128: @@ -5252,7 +5273,7 @@ yyreduce: parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier); } -#line 5256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 129: @@ -5281,7 +5302,7 @@ yyreduce: (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn))) (yyval.interm.type).qualifier.smooth = true; } -#line 5285 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 130: @@ -5292,7 +5313,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.invariant = true; } -#line 5296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 131: @@ -5304,7 +5325,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.smooth = true; } -#line 5308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5329 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 132: @@ -5316,23 +5337,27 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.flat = true; } -#line 5320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5341 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 133: #line 1118 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective"); +#ifdef NV_EXTENSIONS + parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective"); +#else parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "noperspective"); +#endif parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "noperspective"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nopersp = true; } -#line 5332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 134: -#line 1125 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1129 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD"); @@ -5342,84 +5367,84 @@ yyreduce: (yyval.interm.type).qualifier.explicitInterp = true; #endif } -#line 5346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5371 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 135: -#line 1137 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1141 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[-1].interm.type); } -#line 5354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5379 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 136: -#line 1143 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1147 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5362 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 137: -#line 1146 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1150 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[-2].interm.type); (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers); parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false); } -#line 5372 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 138: -#line 1153 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1157 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string); } -#line 5381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 139: -#line 1157 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1161 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[-2].lex).loc); parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode)); } -#line 5390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 140: -#line 1161 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1165 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // because "shared" is both an identifier and a keyword (yyval.interm.type).init((yyvsp[0].lex).loc); TString strShared("shared"); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared); } -#line 5400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 141: -#line 1169 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1173 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.noContraction = true; } -#line 5411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 142: -#line 1178 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1182 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 143: -#line 1181 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1185 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[-1].interm.type); if ((yyval.interm.type).basicType == EbtVoid) @@ -5428,72 +5453,72 @@ yyreduce: (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers); parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false); } -#line 5432 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 144: -#line 1192 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1196 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5465 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 145: -#line 1195 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1199 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5448 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 146: -#line 1198 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1202 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5482 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 147: -#line 1202 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - // allow inheritance of storage qualifier from block declaration - (yyval.interm.type) = (yyvsp[0].interm.type); - } -#line 5466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 148: #line 1206 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5475 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 149: + case 148: #line 1210 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 149: +#line 1214 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + // allow inheritance of storage qualifier from block declaration + (yyval.interm.type) = (yyvsp[0].interm.type); + } +#line 5509 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 150: -#line 1217 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1221 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqConst; // will later turn into EvqConstReadOnly, if the initializer is not constant } -#line 5493 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 151: -#line 1221 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1225 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute"); @@ -5506,11 +5531,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 5510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 152: -#line 1233 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1237 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying"); @@ -5525,43 +5550,43 @@ yyreduce: else (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 5529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5554 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 153: -#line 1247 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1251 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "inout"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqInOut; } -#line 5539 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5564 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 154: -#line 1252 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1256 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "in"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqIn; } -#line 5550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5575 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 155: -#line 1258 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1262 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "out"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqOut; } -#line 5561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 156: -#line 1264 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1268 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid"); @@ -5569,52 +5594,52 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.centroid = true; } -#line 5573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5598 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 157: -#line 1271 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1275 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "patch"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.patch = true; } -#line 5584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 158: -#line 1277 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1281 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "sample"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.sample = true; } -#line 5594 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 159: -#line 1282 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1286 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "uniform"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqUniform; } -#line 5604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 160: -#line 1287 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1291 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "buffer"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqBuffer; } -#line 5614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 161: -#line 1292 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1296 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "shared"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared"); @@ -5623,126 +5648,126 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqShared; } -#line 5627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 162: -#line 1300 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1304 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.coherent = true; } -#line 5636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5661 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 163: -#line 1304 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1308 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.volatil = true; } -#line 5645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 164: -#line 1308 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1312 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.restrict = true; } -#line 5654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 165: -#line 1312 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1316 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.readonly = true; } -#line 5663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 166: -#line 1316 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1320 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.writeonly = true; } -#line 5672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 167: -#line 1320 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1324 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[0].lex).loc); } -#line 5683 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 168: -#line 1326 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1330 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[-3].lex).loc); } -#line 5694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 169: -#line 1335 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1339 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // TODO } -#line 5702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 170: -#line 1338 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1342 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // TODO: 4.0 semantics: subroutines // 1) make sure each identifier is a type declared earlier with SUBROUTINE // 2) save all of the identifiers for future comparison with the declared function } -#line 5712 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 171: -#line 1346 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1350 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); } -#line 5721 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5746 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 172: -#line 1350 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1354 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.arrayDimCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes, 0); (yyval.interm.type) = (yyvsp[-1].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes; } -#line 5732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 173: -#line 1359 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1363 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).arraySizes = new TArraySizes; (yyval.interm).arraySizes->addInnerSize(); } -#line 5742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5767 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 174: -#line 1364 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1368 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[-2].lex).loc; (yyval.interm).arraySizes = new TArraySizes; @@ -5751,20 +5776,20 @@ yyreduce: parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size); (yyval.interm).arraySizes->addInnerSize(size); } -#line 5755 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 175: -#line 1372 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1376 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-2].interm); (yyval.interm).arraySizes->addInnerSize(); } -#line 5764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5789 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 176: -#line 1376 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1380 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-3].interm); @@ -5772,1484 +5797,1484 @@ yyreduce: parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size); (yyval.interm).arraySizes->addInnerSize(size); } -#line 5776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 177: -#line 1386 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1390 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtVoid; } -#line 5785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 178: -#line 1390 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1394 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 5794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 179: -#line 1394 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1398 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 5804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 180: -#line 1399 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1403 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; } -#line 5814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 181: -#line 1404 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1408 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 5824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5849 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 182: -#line 1409 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1413 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 5834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5859 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 183: -#line 1414 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1418 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 5843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5868 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 184: -#line 1418 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1422 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 5853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5878 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 185: -#line 1423 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1427 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; } -#line 5863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 186: -#line 1428 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1432 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; } -#line 5873 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 187: -#line 1433 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1437 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; } -#line 5883 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 188: -#line 1438 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1442 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; } -#line 5893 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 189: -#line 1443 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1447 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 5903 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 190: -#line 1448 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1452 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 5913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5938 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 191: -#line 1453 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1457 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; } -#line 5923 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5948 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 192: -#line 1458 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1462 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; } -#line 5933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 193: -#line 1463 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtBool; - } -#line 5942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 194: #line 1467 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtBool; + } +#line 5967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 194: +#line 1471 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 5952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 195: -#line 1472 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1476 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 5962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5987 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 196: -#line 1477 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1481 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 5972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5997 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 197: -#line 1482 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1486 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 5983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 198: -#line 1488 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1492 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 5994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6019 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 199: -#line 1494 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1498 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 6005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 200: -#line 1500 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1504 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(2); } -#line 6016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6041 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 201: -#line 1506 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1510 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(3); } -#line 6027 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6052 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 202: -#line 1512 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1516 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(4); } -#line 6038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 203: -#line 1518 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1522 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 6049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6074 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 204: -#line 1524 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1528 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 6060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6085 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 205: -#line 1530 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1534 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 6071 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 206: -#line 1536 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1540 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 6082 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6107 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 207: -#line 1542 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1546 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 6093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6118 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 208: -#line 1548 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1552 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 6104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 209: -#line 1554 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1558 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(2); } -#line 6114 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 210: -#line 1559 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1563 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(3); } -#line 6124 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 211: -#line 1564 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1568 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(4); } -#line 6134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 212: -#line 1569 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1573 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 6144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6169 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 213: -#line 1574 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1578 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 6154 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6179 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 214: -#line 1579 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1583 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 6164 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6189 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 215: -#line 1584 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1588 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(2); } -#line 6175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 216: -#line 1590 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1594 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(3); } -#line 6186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 217: -#line 1596 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1600 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(4); } -#line 6197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 218: -#line 1602 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1606 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(2); } -#line 6208 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 219: -#line 1608 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1612 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(3); } -#line 6219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 220: -#line 1614 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1618 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(4); } -#line 6230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 221: -#line 1620 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1624 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 6241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6266 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 222: -#line 1626 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1630 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 6252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 223: -#line 1632 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1636 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 6263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 224: -#line 1638 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1642 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(2); } -#line 6274 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 225: -#line 1644 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1648 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(3); } -#line 6285 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6310 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 226: -#line 1650 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1654 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(4); } -#line 6296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6321 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 227: -#line 1656 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1660 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 6307 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 228: -#line 1662 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1666 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 6318 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 229: -#line 1668 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1672 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 6329 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 230: -#line 1674 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1678 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(2); } -#line 6340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 231: -#line 1680 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1684 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(3); } -#line 6351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 232: -#line 1686 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1690 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(4); } -#line 6362 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 233: -#line 1692 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1696 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(2); } -#line 6373 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 234: -#line 1698 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1702 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(3); } -#line 6384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 235: -#line 1704 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1708 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(4); } -#line 6395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6420 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 236: -#line 1710 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1714 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 6406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 237: -#line 1716 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1720 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 6417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6442 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 238: -#line 1722 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1726 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 6428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6453 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 239: -#line 1728 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1732 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(2); } -#line 6439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 240: -#line 1734 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1738 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(3); } -#line 6450 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6475 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 241: -#line 1740 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1744 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(4); } -#line 6461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 242: -#line 1746 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1750 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 243: -#line 1751 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1755 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 244: -#line 1756 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1760 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 245: -#line 1761 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1765 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 246: -#line 1766 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1770 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 6511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 247: -#line 1771 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1775 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 6521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 248: -#line 1776 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1780 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 6531 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6556 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 249: -#line 1781 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1785 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 250: -#line 1786 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1790 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 6551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 251: -#line 1791 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1795 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 6561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 252: -#line 1796 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1800 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 6571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 253: -#line 1801 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1805 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 254: -#line 1806 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1810 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 6592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 255: -#line 1812 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1816 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 6603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 256: -#line 1818 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1822 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 6614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 257: -#line 1824 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1828 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 6625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 258: -#line 1830 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1834 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 6636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6661 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 259: -#line 1836 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1840 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 6647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 260: -#line 1842 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1846 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 6658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6683 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 261: -#line 1848 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1852 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 6669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 262: -#line 1854 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1858 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 6680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6705 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 263: -#line 1860 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1864 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 6691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 264: -#line 1866 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1870 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 6702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 265: -#line 1872 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1876 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 6713 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 266: -#line 1878 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1882 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 6724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 267: -#line 1884 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1888 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 6735 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 268: -#line 1890 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1894 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 6746 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 269: -#line 1896 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1900 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 6757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6782 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 270: -#line 1902 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1906 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 3); } -#line 6768 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 271: -#line 1908 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1912 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 4); } -#line 6779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 272: -#line 1914 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1918 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 2); } -#line 6790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6815 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 273: -#line 1920 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1924 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 6801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 274: -#line 1926 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1930 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 4); } -#line 6812 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6837 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 275: -#line 1932 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1936 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 2); } -#line 6823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 276: -#line 1938 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1942 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 3); } -#line 6834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6859 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 277: -#line 1944 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1948 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 6845 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 278: -#line 1950 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1954 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6881 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 279: -#line 1956 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1960 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6892 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 280: -#line 1962 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1966 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6878 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6903 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 281: -#line 1968 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1972 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 282: -#line 1974 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1978 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 6900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 283: -#line 1980 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1984 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 6911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 284: -#line 1986 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1990 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 6922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6947 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 285: -#line 1992 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1996 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 286: -#line 1998 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2002 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 6944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6969 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 287: -#line 2004 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2008 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 6955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6980 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 288: -#line 2010 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2014 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 6966 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 289: -#line 2016 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2020 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7002 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 290: -#line 2022 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2026 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 6988 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7013 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 291: -#line 2028 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2032 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 6999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 292: -#line 2034 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2038 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7010 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7035 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 293: -#line 2040 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2044 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7046 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 294: -#line 2046 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2050 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 7032 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 295: -#line 2052 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2056 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 7043 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 296: -#line 2058 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2062 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 7054 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7079 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 297: -#line 2064 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2068 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 298: -#line 2070 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2074 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 7076 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7101 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 299: -#line 2076 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2080 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 7087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 300: -#line 2082 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2086 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 7098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 301: -#line 2088 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2092 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 302: -#line 2094 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2098 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAtomicUint; } -#line 7119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 303: -#line 2099 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2103 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D); } -#line 7129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7154 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 304: -#line 2104 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2108 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); } -#line 7139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7164 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 305: -#line 2109 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2113 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd3D); } -#line 7149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 306: -#line 2114 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2118 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube); } -#line 7159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 307: -#line 2119 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2123 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true); } -#line 7169 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 308: -#line 2124 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2128 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true); } -#line 7179 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7204 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 309: -#line 2129 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2133 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true); } -#line 7189 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 310: -#line 2134 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2138 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true); } -#line 7199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 311: -#line 2139 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2143 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true); } -#line 7209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 312: -#line 2144 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2148 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true); } -#line 7219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 313: -#line 2149 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2153 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true); } -#line 7229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 314: -#line 2154 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2158 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true); } -#line 7239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7264 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 315: -#line 2159 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2163 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true); } -#line 7249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7274 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 316: -#line 2164 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2168 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7258,11 +7283,11 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd1D); #endif } -#line 7262 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7287 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 317: -#line 2172 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2176 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7271,11 +7296,11 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd2D); #endif } -#line 7275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 318: -#line 2180 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2184 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7284,11 +7309,11 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd3D); #endif } -#line 7288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 319: -#line 2188 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2192 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7297,11 +7322,11 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, EsdCube); #endif } -#line 7301 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 320: -#line 2196 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2200 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7310,11 +7335,11 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true); #endif } -#line 7314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7339 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 321: -#line 2204 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2208 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7323,11 +7348,11 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true); #endif } -#line 7327 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 322: -#line 2212 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2216 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7336,11 +7361,11 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true); #endif } -#line 7340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 323: -#line 2220 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2224 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7349,11 +7374,11 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true); #endif } -#line 7353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 324: -#line 2228 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2232 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7362,11 +7387,11 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true); #endif } -#line 7366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 325: -#line 2236 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2240 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7375,11 +7400,11 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true); #endif } -#line 7379 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 326: -#line 2244 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2248 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7388,11 +7413,11 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true); #endif } -#line 7392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 327: -#line 2252 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2256 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7401,11 +7426,11 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true); #endif } -#line 7405 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 328: -#line 2260 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2264 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7414,171 +7439,171 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true); #endif } -#line 7418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7443 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 329: -#line 2268 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2272 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D); } -#line 7428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7453 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 330: -#line 2273 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2277 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D); } -#line 7438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 331: -#line 2278 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2282 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd3D); } -#line 7448 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 332: -#line 2283 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2287 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube); } -#line 7458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7483 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 333: -#line 2288 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2292 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D, true); } -#line 7468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7493 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 334: -#line 2293 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2297 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true); } -#line 7478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 335: -#line 2298 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2302 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube, true); } -#line 7488 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 336: -#line 2303 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2307 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D); } -#line 7498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7523 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 337: -#line 2308 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2312 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D); } -#line 7508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 338: -#line 2313 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2317 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd3D); } -#line 7518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7543 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 339: -#line 2318 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2322 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube); } -#line 7528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7553 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 340: -#line 2323 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2327 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D, true); } -#line 7538 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 341: -#line 2328 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2332 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true); } -#line 7548 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 342: -#line 2333 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2337 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube, true); } -#line 7558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7583 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 343: -#line 2338 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2342 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect); } -#line 7568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 344: -#line 2343 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2347 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true); } -#line 7578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 345: -#line 2348 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2352 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7587,11 +7612,11 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, EsdRect); #endif } -#line 7591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7616 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 346: -#line 2356 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2360 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7600,41 +7625,41 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true); #endif } -#line 7604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 347: -#line 2364 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2368 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdRect); } -#line 7614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 348: -#line 2369 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2373 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdRect); } -#line 7624 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 349: -#line 2374 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2378 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer); } -#line 7634 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 350: -#line 2379 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2383 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7643,41 +7668,41 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer); #endif } -#line 7647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 351: -#line 2387 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2391 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdBuffer); } -#line 7657 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 352: -#line 2392 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2396 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdBuffer); } -#line 7667 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7692 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 353: -#line 2397 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2401 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true); } -#line 7677 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 354: -#line 2402 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2406 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7686,41 +7711,41 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true); #endif } -#line 7690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7715 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 355: -#line 2410 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2414 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true); } -#line 7700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7725 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 356: -#line 2415 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2419 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true); } -#line 7710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7735 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 357: -#line 2420 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2424 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true); } -#line 7720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7745 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 358: -#line 2425 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2429 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); @@ -7729,61 +7754,61 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true); #endif } -#line 7733 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 359: -#line 2433 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2437 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true); } -#line 7743 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7768 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 360: -#line 2438 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2442 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true); } -#line 7753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 361: -#line 2443 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2447 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(false); } -#line 7763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 362: -#line 2448 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2452 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(true); } -#line 7773 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7798 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 363: -#line 2453 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2457 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D); } -#line 7783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7808 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 364: -#line 2458 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2462 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); @@ -7792,21 +7817,21 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D); #endif } -#line 7796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7821 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 365: -#line 2466 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2470 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D); } -#line 7806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7831 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 366: -#line 2471 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2475 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); @@ -7815,21 +7840,21 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D); #endif } -#line 7819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7844 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 367: -#line 2479 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2483 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D); } -#line 7829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 368: -#line 2484 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2488 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); @@ -7838,21 +7863,21 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D); #endif } -#line 7842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 369: -#line 2492 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2496 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube); } -#line 7852 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 370: -#line 2497 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2501 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); @@ -7861,21 +7886,21 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube); #endif } -#line 7865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 371: -#line 2505 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2509 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true); } -#line 7875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 372: -#line 2510 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2514 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); @@ -7884,21 +7909,21 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true); #endif } -#line 7888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 373: -#line 2518 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2522 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true); } -#line 7898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7923 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 374: -#line 2523 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2527 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); @@ -7907,21 +7932,21 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true); #endif } -#line 7911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 375: -#line 2531 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2535 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true); } -#line 7921 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 376: -#line 2536 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2540 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); @@ -7930,161 +7955,161 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true); #endif } -#line 7934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 377: -#line 2544 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2548 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D); } -#line 7944 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7969 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 378: -#line 2549 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2553 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D); } -#line 7954 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 379: -#line 2554 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2558 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D); } -#line 7964 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7989 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 380: -#line 2559 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2563 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube); } -#line 7974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 381: -#line 2564 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2568 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true); } -#line 7984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8009 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 382: -#line 2569 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2573 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true); } -#line 7994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8019 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 383: -#line 2574 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2578 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true); } -#line 8004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8029 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 384: -#line 2579 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2583 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D); } -#line 8014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 385: -#line 2584 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2588 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D); } -#line 8024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 386: -#line 2589 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2593 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D); } -#line 8034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 387: -#line 2594 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2598 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube); } -#line 8044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8069 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 388: -#line 2599 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2603 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true); } -#line 8054 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8079 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 389: -#line 2604 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2608 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true); } -#line 8064 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 390: -#line 2609 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2613 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true); } -#line 8074 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 391: -#line 2614 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2618 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect); } -#line 8084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 392: -#line 2619 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2623 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); @@ -8093,41 +8118,41 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect); #endif } -#line 8097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 393: -#line 2627 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2631 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect); } -#line 8107 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8132 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 394: -#line 2632 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2636 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect); } -#line 8117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8142 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 395: -#line 2637 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2641 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer); } -#line 8127 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8152 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 396: -#line 2642 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2646 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); @@ -8136,41 +8161,41 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer); #endif } -#line 8140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8165 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 397: -#line 2650 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2654 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer); } -#line 8150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 398: -#line 2655 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2659 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer); } -#line 8160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 399: -#line 2660 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2664 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true); } -#line 8170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8195 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 400: -#line 2665 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2669 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); @@ -8179,41 +8204,41 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true); #endif } -#line 8183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8208 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 401: -#line 2673 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2677 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true); } -#line 8193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8218 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 402: -#line 2678 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2682 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true); } -#line 8203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8228 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 403: -#line 2683 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2687 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true); } -#line 8213 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8238 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 404: -#line 2688 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2692 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); @@ -8222,41 +8247,41 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true); #endif } -#line 8226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8251 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 405: -#line 2696 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2700 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true); } -#line 8236 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 406: -#line 2701 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2705 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true); } -#line 8246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 407: -#line 2706 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2710 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D); } -#line 8256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 408: -#line 2711 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2715 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); @@ -8265,41 +8290,41 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D); #endif } -#line 8269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 409: -#line 2719 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2723 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D); } -#line 8279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 410: -#line 2724 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2728 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D); } -#line 8289 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 411: -#line 2729 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2733 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D); } -#line 8299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 412: -#line 2734 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2738 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); @@ -8308,41 +8333,41 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D); #endif } -#line 8312 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 413: -#line 2742 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2746 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D); } -#line 8322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8347 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 414: -#line 2747 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2751 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D); } -#line 8332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 415: -#line 2752 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2756 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D); } -#line 8342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 416: -#line 2757 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2761 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); @@ -8351,41 +8376,41 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D); #endif } -#line 8355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 417: -#line 2765 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2769 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd3D); } -#line 8365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 418: -#line 2770 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2774 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd3D); } -#line 8375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 419: -#line 2775 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2779 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect); } -#line 8385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8410 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 420: -#line 2780 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2784 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); @@ -8394,41 +8419,41 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect); #endif } -#line 8398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 421: -#line 2788 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2792 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdRect); } -#line 8408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8433 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 422: -#line 2793 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2797 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdRect); } -#line 8418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8443 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 423: -#line 2798 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2802 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube); } -#line 8428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8453 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 424: -#line 2803 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2807 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); @@ -8437,41 +8462,41 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube); #endif } -#line 8441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 425: -#line 2811 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2815 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube); } -#line 8451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8476 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 426: -#line 2816 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2820 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube); } -#line 8461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 427: -#line 2821 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2825 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer); } -#line 8471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 428: -#line 2826 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2830 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); @@ -8480,41 +8505,41 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer); #endif } -#line 8484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8509 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 429: -#line 2834 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2838 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer); } -#line 8494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 430: -#line 2839 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2843 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer); } -#line 8504 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 431: -#line 2844 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2848 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true); } -#line 8514 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8539 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 432: -#line 2849 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2853 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); @@ -8523,41 +8548,41 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true); #endif } -#line 8527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8552 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 433: -#line 2857 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2861 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true); } -#line 8537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8562 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 434: -#line 2862 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2866 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true); } -#line 8547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 435: -#line 2867 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2871 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true); } -#line 8557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 436: -#line 2872 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2876 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); @@ -8566,41 +8591,41 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true); #endif } -#line 8570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 437: -#line 2880 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2884 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true); } -#line 8580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8605 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 438: -#line 2885 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2889 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true); } -#line 8590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8615 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 439: -#line 2890 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2894 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true); } -#line 8600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 440: -#line 2895 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2899 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); @@ -8609,41 +8634,41 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true); #endif } -#line 8613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8638 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 441: -#line 2903 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2907 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true); } -#line 8623 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8648 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 442: -#line 2908 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2912 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true); } -#line 8633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 443: -#line 2913 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2917 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true); } -#line 8643 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 444: -#line 2918 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2922 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); @@ -8652,41 +8677,41 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true); #endif } -#line 8656 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8681 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 445: -#line 2926 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2930 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true); } -#line 8666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 446: -#line 2931 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2935 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true); } -#line 8676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8701 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 447: -#line 2936 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2940 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true); } -#line 8686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 448: -#line 2941 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2945 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); @@ -8695,64 +8720,64 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true); #endif } -#line 8699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 449: -#line 2949 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2953 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true); } -#line 8709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8734 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 450: -#line 2954 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2958 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true); } -#line 8719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 451: -#line 2959 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2963 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // GL_OES_EGL_image_external (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.external = true; } -#line 8730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8755 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 452: -#line 2965 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2969 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat); } -#line 8741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 453: -#line 2971 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2975 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat, true); } -#line 8752 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8777 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 454: -#line 2977 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2981 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); @@ -8762,11 +8787,11 @@ yyreduce: (yyval.interm.type).sampler.setSubpass(EbtFloat16); #endif } -#line 8766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8791 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 455: -#line 2986 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2990 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { #ifdef AMD_EXTENSIONS parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); @@ -8776,65 +8801,65 @@ yyreduce: (yyval.interm.type).sampler.setSubpass(EbtFloat16, true); #endif } -#line 8780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 456: -#line 2995 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2999 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt); } -#line 8791 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8816 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 457: -#line 3001 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3005 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt, true); } -#line 8802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 458: -#line 3007 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3011 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint); } -#line 8813 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 459: -#line 3013 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3017 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint, true); } -#line 8824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8849 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 460: -#line 3019 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3023 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type)); } -#line 8834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8859 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 461: -#line 3024 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3028 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // // This is for user defined type names. The lexical phase looked up the @@ -8848,47 +8873,47 @@ yyreduce: } else parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), ""); } -#line 8852 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 462: -#line 3040 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3044 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh); } -#line 8862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8887 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 463: -#line 3045 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3049 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium); } -#line 8872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 464: -#line 3050 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3054 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow); } -#line 8882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8907 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 465: -#line 3058 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3062 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } -#line 8888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 466: -#line 3058 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3062 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string); parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure); @@ -8900,17 +8925,17 @@ yyreduce: (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 8904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 467: -#line 3069 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3073 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } -#line 8910 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 468: -#line 3069 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3073 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { TType* structure = new TType((yyvsp[-1].interm.typeList), TString("")); (yyval.interm.type).init((yyvsp[-4].lex).loc); @@ -8918,19 +8943,19 @@ yyreduce: (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 8922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8947 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 469: -#line 3079 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3083 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 8930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 470: -#line 3082 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3086 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) { @@ -8941,11 +8966,11 @@ yyreduce: (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 8945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 471: -#line 3095 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3099 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -8964,11 +8989,11 @@ yyreduce: (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type)); } } -#line 8968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 472: -#line 3113 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3117 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalQualifierFixCheck((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier); if ((yyvsp[-2].interm.type).arraySizes) { @@ -8990,38 +9015,38 @@ yyreduce: (*(yyval.interm.typeList))[i].type->mergeType((yyvsp[-2].interm.type)); } } -#line 8994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9019 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 473: -#line 3137 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3141 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeList) = new TTypeList; (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 9003 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 474: -#line 3141 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3145 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 9011 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 475: -#line 3147 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3151 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeLine).type = new TType(EbtVoid); (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc; (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string); } -#line 9021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9046 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 476: -#line 3152 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3156 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.arrayDimCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes, 0); @@ -9030,219 +9055,219 @@ yyreduce: (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string); (yyval.interm.typeLine).type->newArraySizes(*(yyvsp[0].interm).arraySizes); } -#line 9034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 477: -#line 3163 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3167 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 9042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 478: -#line 3166 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3170 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); } -#line 9053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 479: -#line 3172 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3176 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 9064 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 480: -#line 3181 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3185 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc()); } -#line 9072 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9097 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 481: -#line 3184 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3188 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); } -#line 9080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 482: -#line 3190 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3194 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 483: -#line 3194 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3198 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9092 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 484: -#line 3195 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3199 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 485: -#line 3201 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3205 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 486: -#line 3202 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3206 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9110 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 487: -#line 3203 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3207 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9141 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 488: -#line 3204 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3208 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 489: -#line 3205 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3209 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9153 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 490: -#line 3206 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3210 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 491: -#line 3207 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3211 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9165 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 492: -#line 3211 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3215 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; } -#line 9146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 493: -#line 3212 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3216 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; } -#line 9155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 494: -#line 3216 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3220 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; } -#line 9164 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9189 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 495: -#line 3220 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3224 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate()) (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence); (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode); } -#line 9174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 496: -#line 3228 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3232 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9205 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 497: -#line 3229 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3233 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 498: -#line 3233 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3237 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { ++parseContext.controlFlowNestingLevel; } -#line 9194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 499: -#line 3236 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3240 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9228 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 500: -#line 3240 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3244 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 9213 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9238 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 501: -#line 3245 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3249 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 502: -#line 3254 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3258 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; } -#line 9232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9257 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 503: -#line 3257 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3261 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate()) (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence); (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode); } -#line 9242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9267 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 504: -#line 3265 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3269 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase || @@ -9251,11 +9276,11 @@ yyreduce: (yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case } } -#line 9255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 505: -#line 3273 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3277 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase || (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) { @@ -9264,76 +9289,76 @@ yyreduce: } else (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 9268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 506: -#line 3284 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3288 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; } -#line 9274 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 507: -#line 3285 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3289 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } -#line 9280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9305 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 508: -#line 3289 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3293 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 509: -#line 3292 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3296 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 510: -#line 3298 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3302 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode)); (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc); } -#line 9306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 511: -#line 3305 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3309 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode); } -#line 9315 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 512: -#line 3309 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3313 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode); (yyval.interm.nodePair).node2 = 0; } -#line 9324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9349 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 513: -#line 3317 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3321 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)); } -#line 9333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 514: -#line 3321 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3325 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type)); @@ -9344,28 +9369,28 @@ yyreduce: else (yyval.interm.intermTypedNode) = 0; } -#line 9348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9373 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 515: -#line 3334 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3338 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 516: -#line 3337 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3341 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 517: -#line 3343 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3347 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // start new switch sequence on the switch stack ++parseContext.controlFlowNestingLevel; @@ -9374,11 +9399,11 @@ yyreduce: parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.symbolTable.push(); } -#line 9378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 518: -#line 3351 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3355 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0); delete parseContext.switchSequenceStack.back(); @@ -9388,27 +9413,27 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 9392 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 519: -#line 3363 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3367 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; } -#line 9400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 520: -#line 3366 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3370 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9433 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 521: -#line 3372 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3376 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -9421,11 +9446,11 @@ yyreduce: (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc); } } -#line 9425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9450 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 522: -#line 3384 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3388 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -9435,28 +9460,28 @@ yyreduce: else (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); } -#line 9439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 523: -#line 3396 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3400 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9472 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 524: -#line 3399 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3403 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 525: -#line 3405 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3409 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", ""); @@ -9465,11 +9490,11 @@ yyreduce: ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 9469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 526: -#line 3413 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3417 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc); @@ -9477,21 +9502,21 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 9481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 527: -#line 3420 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3424 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 9491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 528: -#line 3425 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3429 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); @@ -9503,22 +9528,22 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 9507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9532 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 529: -#line 3436 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3440 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 9518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9543 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 530: -#line 3442 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3446 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc); @@ -9531,81 +9556,81 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 9535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9560 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 531: -#line 3457 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3461 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9543 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 532: -#line 3460 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3464 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 533: -#line 3466 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); - } -#line 9559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 534: -#line 3469 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - (yyval.interm.intermTypedNode) = 0; - } -#line 9567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 535: -#line 3475 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); - (yyval.interm.nodePair).node2 = 0; - } #line 9576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 536: + case 533: +#line 3470 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); + } +#line 9584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 534: +#line 3473 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.intermTypedNode) = 0; + } +#line 9592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 535: #line 3479 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); + (yyval.interm.nodePair).node2 = 0; + } +#line 9601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 536: +#line 3483 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode); } -#line 9585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 537: -#line 3486 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3490 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if (parseContext.loopNestingLevel <= 0) parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", ""); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc); } -#line 9595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 538: -#line 3491 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3495 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0) parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", ""); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc); } -#line 9605 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 539: -#line 3496 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3500 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc); if (parseContext.currentFunctionType->getBasicType() != EbtVoid) @@ -9613,83 +9638,83 @@ yyreduce: if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 9617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 540: -#line 3503 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3507 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode)); } -#line 9625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 541: -#line 3506 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3510 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc); } -#line 9634 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 542: -#line 3515 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3519 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } -#line 9643 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 543: -#line 3519 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3523 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[0].interm.intermNode) != nullptr) { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } } -#line 9654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 544: -#line 3528 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3532 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 545: -#line 3531 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3535 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9695 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 546: -#line 3534 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3538 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon"); parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon"); (yyval.interm.intermNode) = nullptr; } -#line 9680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9705 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 547: -#line 3542 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3546 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */); (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function); } -#line 9689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 548: -#line 3546 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3550 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) @@ -9705,52 +9730,52 @@ yyreduce: (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug); (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable); } -#line 9709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9734 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 549: -#line 3564 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3568 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = (yyvsp[-2].interm.attributes); parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute"); } -#line 9718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9743 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 550: -#line 3570 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3574 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 9726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9751 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 551: -#line 3573 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3577 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); } -#line 9734 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 552: -#line 3578 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3582 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 9742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9767 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 553: -#line 3581 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3585 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 9750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9775 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; -#line 9754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -9978,5 +10003,5 @@ yyreturn: #endif return yyresult; } -#line 3585 "MachineIndependent/glslang.y" /* yacc.c:1906 */ +#line 3589 "MachineIndependent/glslang.y" /* yacc.c:1906 */ diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h index 6b07aedd..63eeab04 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp.h +++ b/glslang/MachineIndependent/glslang_tab.cpp.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.0. */ +/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -437,7 +437,7 @@ extern int yydebug; /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED -typedef union YYSTYPE YYSTYPE; + union YYSTYPE { #line 70 "MachineIndependent/glslang.y" /* yacc.c:1909 */ @@ -477,6 +477,8 @@ union YYSTYPE #line 479 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */ }; + +typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif From 34cd7630f89597c559b81df12dc0e69be4b5d36d Mon Sep 17 00:00:00 2001 From: Baldur Karlsson Date: Tue, 13 Mar 2018 19:53:30 +0000 Subject: [PATCH 07/21] Replace en-dash with simple ASCII hyphen * This means the source file is ASCII instead of (assumed) UTF-8 and doesn't cause warnings when compiling on non-western codepages. --- glslang/MachineIndependent/iomapper.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index a0b5a7fb..a7deb9d5 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -598,7 +598,7 @@ protected: /******************************************************************************** The following IO resolver maps types in HLSL register space, as follows: -t – for shader resource views (SRV) +t - for shader resource views (SRV) TEXTURE1D TEXTURE1DARRAY TEXTURE2D @@ -613,7 +613,7 @@ t – for shader resource views (SRV) BUFFER TBUFFER -s – for samplers +s - for samplers SAMPLER SAMPLER1D SAMPLER2D @@ -622,7 +622,7 @@ s – for samplers SAMPLERSTATE SAMPLERCOMPARISONSTATE -u – for unordered access views (UAV) +u - for unordered access views (UAV) RWBYTEADDRESSBUFFER RWSTRUCTUREDBUFFER APPENDSTRUCTUREDBUFFER @@ -634,7 +634,7 @@ u – for unordered access views (UAV) RWTEXTURE2DARRAY RWTEXTURE3D -b – for constant buffer views (CBV) +b - for constant buffer views (CBV) CBUFFER CONSTANTBUFFER ********************************************************************************/ From bfe0952118d23e590164bc71ebb7e4173d3249cd Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Tue, 13 Mar 2018 17:06:51 -0400 Subject: [PATCH 08/21] Fix build several build errors glslang/SPIRV/SpvBuilder.cpp:2533:27: error: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned long') [-Werror,-Wsign-compare] for (int c = 0; c < accessChain.swizzle.size(); ++c) ~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated. glslang/hlsl/hlslParseHelper.cpp:69:5: error: field 'cullDistanceInput' will be initialized after field 'clipDistanceOutput' [-Werror,-Wreorder] cullDistanceInput(nullptr), ^ 1 error generated. glslang/glslang/MachineIndependent/attribute.cpp:85:16: error: comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned long') [-Werror,-Wsign-compare] if (argNum >= args->getSequence().size()) ~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 error generated. --- SPIRV/SpvBuilder.cpp | 2 +- glslang/MachineIndependent/attribute.cpp | 2 +- hlsl/hlslParseHelper.cpp | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 10d0d501..1ba5f12e 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -2530,7 +2530,7 @@ void Builder::remapDynamicSwizzle() if (accessChain.component != NoResult && accessChain.swizzle.size() > 1) { // build a vector of the swizzle for the component to map into std::vector components; - for (int c = 0; c < accessChain.swizzle.size(); ++c) + for (int c = 0; c < (int)accessChain.swizzle.size(); ++c) components.push_back(makeUintConstant(accessChain.swizzle[c])); Id mapType = makeVectorType(makeUintType(32), (int)accessChain.swizzle.size()); Id map = makeCompositeConstant(mapType, components); diff --git a/glslang/MachineIndependent/attribute.cpp b/glslang/MachineIndependent/attribute.cpp index acc17e9f..73b665d8 100644 --- a/glslang/MachineIndependent/attribute.cpp +++ b/glslang/MachineIndependent/attribute.cpp @@ -82,7 +82,7 @@ const TConstUnion* TAttributeArgs::getConstUnion(TBasicType basicType, int argNu if (args == nullptr) return nullptr; - if (argNum >= args->getSequence().size()) + if (argNum >= (int)args->getSequence().size()) return nullptr; const TConstUnion* constVal = &args->getSequence()[argNum]->getAsConstantUnion()->getConstArray()[0]; diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index fbfc428e..09d20dfa 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -65,10 +65,10 @@ HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& int entryPointFunction(nullptr), entryPointFunctionBody(nullptr), gsStreamOutput(nullptr), - clipDistanceInput(nullptr), - cullDistanceInput(nullptr), clipDistanceOutput(nullptr), - cullDistanceOutput(nullptr) + cullDistanceOutput(nullptr), + clipDistanceInput(nullptr), + cullDistanceInput(nullptr) { globalUniformDefaults.clear(); globalUniformDefaults.layoutMatrix = ElmRowMajor; From 137a24dffa8ff81dd3a066b2c2eeb313aab29d8d Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Thu, 15 Mar 2018 19:14:47 -0600 Subject: [PATCH 09/21] AST: Remove convertToBasicType() which was obfuscating the conversion design. Reinforces that conversion rules are operation-specific. Side effect is that HLSL logical-operator conversions are more direct (e.g. float -> bool, rather than float -> int -> bool). --- Test/baseResults/hlsl.implicitBool.frag.out | 215 ++++++------ Test/baseResults/hlsl.logical.binary.frag.out | 101 +++--- glslang/MachineIndependent/Intermediate.cpp | 325 +++++++++--------- .../MachineIndependent/localintermediate.h | 3 - 4 files changed, 315 insertions(+), 329 deletions(-) diff --git a/Test/baseResults/hlsl.implicitBool.frag.out b/Test/baseResults/hlsl.implicitBool.frag.out index 173e2596..c545a2e3 100755 --- a/Test/baseResults/hlsl.implicitBool.frag.out +++ b/Test/baseResults/hlsl.implicitBool.frag.out @@ -74,12 +74,11 @@ gl_FragCoord origin is upper left 0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1}) 0:17 Constant: 0:17 1 (const uint) -0:17 Convert int to bool ( temp bool) -0:17 Convert float to int ( temp int) -0:17 condf: direct index for structure ( uniform float) -0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1}) -0:17 Constant: -0:17 0 (const uint) +0:17 Convert float to bool ( temp bool) +0:17 condf: direct index for structure ( uniform float) +0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1}) +0:17 Constant: +0:17 0 (const uint) 0:17 Convert float to bool ( temp bool) 0:17 condf1: direct index for structure ( uniform 1-component vector of float) 0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1}) @@ -243,12 +242,11 @@ gl_FragCoord origin is upper left 0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1}) 0:17 Constant: 0:17 1 (const uint) -0:17 Convert int to bool ( temp bool) -0:17 Convert float to int ( temp int) -0:17 condf: direct index for structure ( uniform float) -0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1}) -0:17 Constant: -0:17 0 (const uint) +0:17 Convert float to bool ( temp bool) +0:17 condf: direct index for structure ( uniform float) +0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1}) +0:17 Constant: +0:17 0 (const uint) 0:17 Convert float to bool ( temp bool) 0:17 condf1: direct index for structure ( uniform 1-component vector of float) 0:17 'anon@0' (layout( row_major std140) uniform block{ uniform float condf, uniform int condi, uniform 1-component vector of float condf1, uniform 1-component vector of int condi1}) @@ -335,12 +333,12 @@ gl_FragCoord origin is upper left // Module Version 10000 // Generated by (magic number): 80006 -// Id's are bound by 140 +// Id's are bound by 139 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 138 + EntryPoint Fragment 4 "main" 137 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "main" @@ -352,17 +350,17 @@ gl_FragCoord origin is upper left MemberName 16($Global) 2 "condf1" MemberName 16($Global) 3 "condi1" Name 18 "" - Name 88 "f" - Name 101 "i" - Name 121 "g" - Name 138 "@entryPointOutput" + Name 87 "f" + Name 100 "i" + Name 120 "g" + Name 137 "@entryPointOutput" MemberDecorate 16($Global) 0 Offset 0 MemberDecorate 16($Global) 1 Offset 4 MemberDecorate 16($Global) 2 Offset 8 MemberDecorate 16($Global) 3 Offset 12 Decorate 16($Global) Block Decorate 18 DescriptorSet 0 - Decorate 138(@entryPointOutput) Location 0 + Decorate 137(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -388,25 +386,25 @@ gl_FragCoord origin is upper left 53: 6(float) Constant 1077936128 57: 15(int) Constant 3 64: 6(float) Constant 1082130432 - 83: 6(float) Constant 1084227584 - 87: TypePointer Function 6(float) - 100: TypePointer Function 15(int) - 125: 6(float) Constant 1088421888 - 126: 6(float) Constant 1090519040 - 137: TypePointer Output 7(fvec4) -138(@entryPointOutput): 137(ptr) Variable Output + 82: 6(float) Constant 1084227584 + 86: TypePointer Function 6(float) + 99: TypePointer Function 15(int) + 124: 6(float) Constant 1088421888 + 125: 6(float) Constant 1090519040 + 136: TypePointer Output 7(fvec4) +137(@entryPointOutput): 136(ptr) Variable Output 4(main): 2 Function None 3 5: Label - 139: 7(fvec4) FunctionCall 9(@main() - Store 138(@entryPointOutput) 139 + 138: 7(fvec4) FunctionCall 9(@main() + Store 137(@entryPointOutput) 138 Return FunctionEnd 9(@main(): 7(fvec4) Function None 8 10: Label 12(a): 11(ptr) Variable Function - 88(f): 87(ptr) Variable Function - 101(i): 100(ptr) Variable Function - 121(g): 87(ptr) Variable Function + 87(f): 86(ptr) Variable Function + 100(i): 99(ptr) Variable Function + 120(g): 86(ptr) Variable Function Store 12(a) 14 21: 20(ptr) AccessChain 18 19 22: 15(int) Load 21 @@ -457,85 +455,84 @@ gl_FragCoord origin is upper left 70: 23(bool) INotEqual 69 25 71: 35(ptr) AccessChain 18 34 72: 6(float) Load 71 - 73: 15(int) ConvertFToS 72 - 74: 23(bool) INotEqual 73 25 - 75: 23(bool) LogicalAnd 70 74 - 76: 35(ptr) AccessChain 18 46 - 77: 6(float) Load 76 - 78: 23(bool) FOrdNotEqual 77 38 - 79: 23(bool) LogicalOr 75 78 - SelectionMerge 81 None - BranchConditional 79 80 81 - 80: Label - 82: 7(fvec4) Load 12(a) - 84: 7(fvec4) CompositeConstruct 83 83 83 83 - 85: 7(fvec4) FAdd 82 84 - ReturnValue 85 - 81: Label - 89: 35(ptr) AccessChain 18 34 - 90: 6(float) Load 89 - Store 88(f) 90 - Branch 91 - 91: Label - LoopMerge 93 94 None - Branch 95 - 95: Label - 96: 6(float) Load 88(f) - 97: 23(bool) FOrdNotEqual 96 38 - BranchConditional 97 92 93 - 92: Label - 98: 6(float) Load 88(f) - 99: 6(float) FSub 98 30 - Store 88(f) 99 - Branch 94 - 94: Label - Branch 91 - 93: Label - 102: 20(ptr) AccessChain 18 19 - 103: 15(int) Load 102 - Store 101(i) 103 + 73: 23(bool) FOrdNotEqual 72 38 + 74: 23(bool) LogicalAnd 70 73 + 75: 35(ptr) AccessChain 18 46 + 76: 6(float) Load 75 + 77: 23(bool) FOrdNotEqual 76 38 + 78: 23(bool) LogicalOr 74 77 + SelectionMerge 80 None + BranchConditional 78 79 80 + 79: Label + 81: 7(fvec4) Load 12(a) + 83: 7(fvec4) CompositeConstruct 82 82 82 82 + 84: 7(fvec4) FAdd 81 83 + ReturnValue 84 + 80: Label + 88: 35(ptr) AccessChain 18 34 + 89: 6(float) Load 88 + Store 87(f) 89 + Branch 90 + 90: Label + LoopMerge 92 93 None + Branch 94 + 94: Label + 95: 6(float) Load 87(f) + 96: 23(bool) FOrdNotEqual 95 38 + BranchConditional 96 91 92 + 91: Label + 97: 6(float) Load 87(f) + 98: 6(float) FSub 97 30 + Store 87(f) 98 + Branch 93 + 93: Label + Branch 90 + 92: Label + 101: 20(ptr) AccessChain 18 19 + 102: 15(int) Load 101 + Store 100(i) 102 + Branch 103 + 103: Label + LoopMerge 105 106 None Branch 104 104: Label - LoopMerge 106 107 None - Branch 105 - 105: Label - 108: 15(int) Load 101(i) - 109: 15(int) ISub 108 19 - Store 101(i) 109 - Branch 107 - 107: Label - 110: 15(int) Load 101(i) - 111: 23(bool) INotEqual 110 25 - BranchConditional 111 104 106 + 107: 15(int) Load 100(i) + 108: 15(int) ISub 107 19 + Store 100(i) 108 + Branch 106 106: Label - Branch 112 - 112: Label - LoopMerge 114 115 None - Branch 116 - 116: Label - 117: 15(int) Load 101(i) - 118: 23(bool) INotEqual 117 25 - BranchConditional 118 113 114 - 113: Label - 119: 15(int) Load 101(i) - 120: 15(int) ISub 119 19 - Store 101(i) 120 - Branch 115 - 115: Label - Branch 112 - 114: Label - 122: 35(ptr) AccessChain 18 34 - 123: 6(float) Load 122 - 124: 23(bool) FOrdNotEqual 123 38 - 127: 6(float) Select 124 125 126 - Store 121(g) 127 - 128: 6(float) Load 121(g) - 129: 7(fvec4) Load 12(a) - 130: 7(fvec4) CompositeConstruct 128 128 128 128 - 131: 7(fvec4) FAdd 129 130 - Store 12(a) 131 - 132: 7(fvec4) Load 12(a) - 133: 7(fvec4) CompositeConstruct 30 30 30 30 - 134: 7(fvec4) FSub 132 133 - ReturnValue 134 + 109: 15(int) Load 100(i) + 110: 23(bool) INotEqual 109 25 + BranchConditional 110 103 105 + 105: Label + Branch 111 + 111: Label + LoopMerge 113 114 None + Branch 115 + 115: Label + 116: 15(int) Load 100(i) + 117: 23(bool) INotEqual 116 25 + BranchConditional 117 112 113 + 112: Label + 118: 15(int) Load 100(i) + 119: 15(int) ISub 118 19 + Store 100(i) 119 + Branch 114 + 114: Label + Branch 111 + 113: Label + 121: 35(ptr) AccessChain 18 34 + 122: 6(float) Load 121 + 123: 23(bool) FOrdNotEqual 122 38 + 126: 6(float) Select 123 124 125 + Store 120(g) 126 + 127: 6(float) Load 120(g) + 128: 7(fvec4) Load 12(a) + 129: 7(fvec4) CompositeConstruct 127 127 127 127 + 130: 7(fvec4) FAdd 128 129 + Store 12(a) 130 + 131: 7(fvec4) Load 12(a) + 132: 7(fvec4) CompositeConstruct 30 30 30 30 + 133: 7(fvec4) FSub 131 132 + ReturnValue 133 FunctionEnd diff --git a/Test/baseResults/hlsl.logical.binary.frag.out b/Test/baseResults/hlsl.logical.binary.frag.out index d8c4c246..6fa45b52 100644 --- a/Test/baseResults/hlsl.logical.binary.frag.out +++ b/Test/baseResults/hlsl.logical.binary.frag.out @@ -13,12 +13,11 @@ gl_FragCoord origin is upper left 0:13 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4}) 0:13 Constant: 0:13 0 (const uint) -0:13 Convert int to bool ( temp bool) -0:13 Convert float to int ( temp int) -0:13 fval: direct index for structure ( uniform float) -0:13 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4}) -0:13 Constant: -0:13 2 (const uint) +0:13 Convert float to bool ( temp bool) +0:13 fval: direct index for structure ( uniform float) +0:13 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4}) +0:13 Constant: +0:13 2 (const uint) 0:13 true case is null 0:14 Test condition and select ( temp void) 0:14 Condition @@ -28,12 +27,11 @@ gl_FragCoord origin is upper left 0:14 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4}) 0:14 Constant: 0:14 0 (const uint) -0:14 Convert int to bool ( temp bool) -0:14 Convert float to int ( temp int) -0:14 fval: direct index for structure ( uniform float) -0:14 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4}) -0:14 Constant: -0:14 2 (const uint) +0:14 Convert float to bool ( temp bool) +0:14 fval: direct index for structure ( uniform float) +0:14 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4}) +0:14 Constant: +0:14 2 (const uint) 0:14 true case is null 0:17 move second child to first child ( temp 4-component vector of float) 0:17 Color: direct index for structure ( temp 4-component vector of float) @@ -79,12 +77,11 @@ gl_FragCoord origin is upper left 0:13 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4}) 0:13 Constant: 0:13 0 (const uint) -0:13 Convert int to bool ( temp bool) -0:13 Convert float to int ( temp int) -0:13 fval: direct index for structure ( uniform float) -0:13 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4}) -0:13 Constant: -0:13 2 (const uint) +0:13 Convert float to bool ( temp bool) +0:13 fval: direct index for structure ( uniform float) +0:13 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4}) +0:13 Constant: +0:13 2 (const uint) 0:13 true case is null 0:14 Test condition and select ( temp void) 0:14 Condition @@ -94,12 +91,11 @@ gl_FragCoord origin is upper left 0:14 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4}) 0:14 Constant: 0:14 0 (const uint) -0:14 Convert int to bool ( temp bool) -0:14 Convert float to int ( temp int) -0:14 fval: direct index for structure ( uniform float) -0:14 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4}) -0:14 Constant: -0:14 2 (const uint) +0:14 Convert float to bool ( temp bool) +0:14 fval: direct index for structure ( uniform float) +0:14 'anon@0' (layout( row_major std140) uniform block{ uniform int ival, uniform 4-component vector of int ival4, uniform float fval, uniform 4-component vector of float fval4}) +0:14 Constant: +0:14 2 (const uint) 0:14 true case is null 0:17 move second child to first child ( temp 4-component vector of float) 0:17 Color: direct index for structure ( temp 4-component vector of float) @@ -129,12 +125,12 @@ gl_FragCoord origin is upper left // Module Version 10000 // Generated by (magic number): 80006 -// Id's are bound by 57 +// Id's are bound by 56 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 54 + EntryPoint Fragment 4 "main" 53 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "main" @@ -147,15 +143,15 @@ gl_FragCoord origin is upper left MemberName 14($Global) 2 "fval" MemberName 14($Global) 3 "fval4" Name 16 "" - Name 45 "psout" - Name 54 "@entryPointOutput.Color" + Name 44 "psout" + Name 53 "@entryPointOutput.Color" MemberDecorate 14($Global) 0 Offset 0 MemberDecorate 14($Global) 1 Offset 16 MemberDecorate 14($Global) 2 Offset 32 MemberDecorate 14($Global) 3 Offset 48 Decorate 14($Global) Block Decorate 16 DescriptorSet 0 - Decorate 54(@entryPointOutput.Color) Location 0 + Decorate 53(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -174,29 +170,29 @@ gl_FragCoord origin is upper left 23: 22(int) Constant 0 25: 12(int) Constant 2 26: TypePointer Uniform 6(float) - 44: TypePointer Function 8(PS_OUTPUT) - 46: 6(float) Constant 1065353216 - 47: 7(fvec4) ConstantComposite 46 46 46 46 - 48: TypePointer Function 7(fvec4) - 53: TypePointer Output 7(fvec4) -54(@entryPointOutput.Color): 53(ptr) Variable Output + 29: 6(float) Constant 0 + 43: TypePointer Function 8(PS_OUTPUT) + 45: 6(float) Constant 1065353216 + 46: 7(fvec4) ConstantComposite 45 45 45 45 + 47: TypePointer Function 7(fvec4) + 52: TypePointer Output 7(fvec4) +53(@entryPointOutput.Color): 52(ptr) Variable Output 4(main): 2 Function None 3 5: Label - 55:8(PS_OUTPUT) FunctionCall 10(@main() - 56: 7(fvec4) CompositeExtract 55 0 - Store 54(@entryPointOutput.Color) 56 + 54:8(PS_OUTPUT) FunctionCall 10(@main() + 55: 7(fvec4) CompositeExtract 54 0 + Store 53(@entryPointOutput.Color) 55 Return FunctionEnd 10(@main():8(PS_OUTPUT) Function None 9 11: Label - 45(psout): 44(ptr) Variable Function + 44(psout): 43(ptr) Variable Function 19: 18(ptr) AccessChain 16 17 20: 12(int) Load 19 24: 21(bool) INotEqual 20 23 27: 26(ptr) AccessChain 16 25 28: 6(float) Load 27 - 29: 12(int) ConvertFToS 28 - 30: 21(bool) INotEqual 29 23 + 30: 21(bool) FOrdNotEqual 28 29 31: 21(bool) LogicalAnd 24 30 SelectionMerge 33 None BranchConditional 31 32 33 @@ -208,16 +204,15 @@ gl_FragCoord origin is upper left 36: 21(bool) INotEqual 35 23 37: 26(ptr) AccessChain 16 25 38: 6(float) Load 37 - 39: 12(int) ConvertFToS 38 - 40: 21(bool) INotEqual 39 23 - 41: 21(bool) LogicalOr 36 40 - SelectionMerge 43 None - BranchConditional 41 42 43 - 42: Label - Branch 43 - 43: Label - 49: 48(ptr) AccessChain 45(psout) 17 - Store 49 47 - 50:8(PS_OUTPUT) Load 45(psout) - ReturnValue 50 + 39: 21(bool) FOrdNotEqual 38 29 + 40: 21(bool) LogicalOr 36 39 + SelectionMerge 42 None + BranchConditional 40 41 42 + 41: Label + Branch 42 + 42: Label + 48: 47(ptr) AccessChain 44(psout) 17 + Store 48 46 + 49:8(PS_OUTPUT) Load 44(psout) + ReturnValue 49 FunctionEnd diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index cd5060e0..5c67f1dd 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -475,7 +475,7 @@ bool TIntermediate::isConversionAllowed(TOperator op, TIntermTyped* node) const // This is 'mechanism' here, it does any conversion told. // It is about basic type, not about shape. -// The policy comes from the shader or the above code. +// The policy comes from the shader or the calling code. TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped* node) const { // @@ -488,44 +488,44 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped switch (convertTo) { case EbtDouble: switch (node->getBasicType()) { - case EbtInt8: newOp = EOpConvInt8ToDouble; break; - case EbtUint8: newOp = EOpConvUint8ToDouble; break; - case EbtInt16: newOp = EOpConvInt16ToDouble; break; - case EbtUint16:newOp = EOpConvUint16ToDouble;break; - case EbtInt: newOp = EOpConvIntToDouble; break; - case EbtUint: newOp = EOpConvUintToDouble; break; - case EbtBool: newOp = EOpConvBoolToDouble; break; - case EbtFloat: newOp = EOpConvFloatToDouble; break; + case EbtInt8: newOp = EOpConvInt8ToDouble; break; + case EbtUint8: newOp = EOpConvUint8ToDouble; break; + case EbtInt16: newOp = EOpConvInt16ToDouble; break; + case EbtUint16: newOp = EOpConvUint16ToDouble; break; + case EbtInt: newOp = EOpConvIntToDouble; break; + case EbtUint: newOp = EOpConvUintToDouble; break; + case EbtBool: newOp = EOpConvBoolToDouble; break; + case EbtFloat: newOp = EOpConvFloatToDouble; break; case EbtFloat16: newOp = EOpConvFloat16ToDouble; break; - case EbtInt64: newOp = EOpConvInt64ToDouble; break; - case EbtUint64: newOp = EOpConvUint64ToDouble; break; + case EbtInt64: newOp = EOpConvInt64ToDouble; break; + case EbtUint64: newOp = EOpConvUint64ToDouble; break; default: return nullptr; } break; case EbtFloat: switch (node->getBasicType()) { - case EbtInt8: newOp = EOpConvInt8ToFloat; break; - case EbtUint8: newOp = EOpConvUint8ToFloat; break; - case EbtInt16: newOp = EOpConvInt16ToFloat; break; - case EbtUint16: newOp = EOpConvUint16ToFloat; break; - case EbtInt: newOp = EOpConvIntToFloat; break; - case EbtUint: newOp = EOpConvUintToFloat; break; - case EbtBool: newOp = EOpConvBoolToFloat; break; - case EbtDouble: newOp = EOpConvDoubleToFloat; break; + case EbtInt8: newOp = EOpConvInt8ToFloat; break; + case EbtUint8: newOp = EOpConvUint8ToFloat; break; + case EbtInt16: newOp = EOpConvInt16ToFloat; break; + case EbtUint16: newOp = EOpConvUint16ToFloat; break; + case EbtInt: newOp = EOpConvIntToFloat; break; + case EbtUint: newOp = EOpConvUintToFloat; break; + case EbtBool: newOp = EOpConvBoolToFloat; break; + case EbtDouble: newOp = EOpConvDoubleToFloat; break; case EbtFloat16: newOp = EOpConvFloat16ToFloat; break; - case EbtInt64: newOp = EOpConvInt64ToFloat; break; - case EbtUint64: newOp = EOpConvUint64ToFloat; break; + case EbtInt64: newOp = EOpConvInt64ToFloat; break; + case EbtUint64: newOp = EOpConvUint64ToFloat; break; default: return nullptr; } break; case EbtFloat16: switch (node->getBasicType()) { - case EbtInt8: newOp = EOpConvInt8ToFloat16; break; - case EbtUint8: newOp = EOpConvUint8ToFloat16; break; - case EbtInt16: newOp = EOpConvInt16ToFloat16; break; - case EbtUint16: newOp = EOpConvUint16ToFloat16; break; + case EbtInt8: newOp = EOpConvInt8ToFloat16; break; + case EbtUint8: newOp = EOpConvUint8ToFloat16; break; + case EbtInt16: newOp = EOpConvInt16ToFloat16; break; + case EbtUint16: newOp = EOpConvUint16ToFloat16; break; case EbtInt: newOp = EOpConvIntToFloat16; break; case EbtUint: newOp = EOpConvUintToFloat16; break; case EbtBool: newOp = EOpConvBoolToFloat16; break; @@ -539,33 +539,33 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped break; case EbtBool: switch (node->getBasicType()) { - case EbtInt8: newOp = EOpConvInt8ToBool; break; - case EbtUint8: newOp = EOpConvUint8ToBool; break; - case EbtInt16: newOp = EOpConvInt16ToBool; break; - case EbtUint16: newOp = EOpConvUint16ToBool; break; - case EbtInt: newOp = EOpConvIntToBool; break; - case EbtUint: newOp = EOpConvUintToBool; break; - case EbtFloat: newOp = EOpConvFloatToBool; break; - case EbtDouble: newOp = EOpConvDoubleToBool; break; + case EbtInt8: newOp = EOpConvInt8ToBool; break; + case EbtUint8: newOp = EOpConvUint8ToBool; break; + case EbtInt16: newOp = EOpConvInt16ToBool; break; + case EbtUint16: newOp = EOpConvUint16ToBool; break; + case EbtInt: newOp = EOpConvIntToBool; break; + case EbtUint: newOp = EOpConvUintToBool; break; + case EbtFloat: newOp = EOpConvFloatToBool; break; + case EbtDouble: newOp = EOpConvDoubleToBool; break; case EbtFloat16: newOp = EOpConvFloat16ToBool; break; - case EbtInt64: newOp = EOpConvInt64ToBool; break; - case EbtUint64: newOp = EOpConvUint64ToBool; break; + case EbtInt64: newOp = EOpConvInt64ToBool; break; + case EbtUint64: newOp = EOpConvUint64ToBool; break; default: return nullptr; } break; case EbtInt8: switch (node->getBasicType()) { - case EbtUint8: newOp = EOpConvUint8ToInt8; break; - case EbtInt16: newOp = EOpConvInt16ToInt8; break; - case EbtUint16: newOp = EOpConvUint16ToInt8; break; - case EbtInt: newOp = EOpConvIntToInt8; break; - case EbtUint: newOp = EOpConvUintToInt8; break; - case EbtInt64: newOp = EOpConvInt64ToInt8; break; - case EbtUint64: newOp = EOpConvUint64ToInt8; break; - case EbtBool: newOp = EOpConvBoolToInt8; break; - case EbtFloat: newOp = EOpConvFloatToInt8; break; - case EbtDouble: newOp = EOpConvDoubleToInt8; break; + case EbtUint8: newOp = EOpConvUint8ToInt8; break; + case EbtInt16: newOp = EOpConvInt16ToInt8; break; + case EbtUint16: newOp = EOpConvUint16ToInt8; break; + case EbtInt: newOp = EOpConvIntToInt8; break; + case EbtUint: newOp = EOpConvUintToInt8; break; + case EbtInt64: newOp = EOpConvInt64ToInt8; break; + case EbtUint64: newOp = EOpConvUint64ToInt8; break; + case EbtBool: newOp = EOpConvBoolToInt8; break; + case EbtFloat: newOp = EOpConvFloatToInt8; break; + case EbtDouble: newOp = EOpConvDoubleToInt8; break; case EbtFloat16: newOp = EOpConvFloat16ToInt8; break; default: return nullptr; @@ -573,16 +573,16 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped break; case EbtUint8: switch (node->getBasicType()) { - case EbtInt8: newOp = EOpConvInt8ToUint8; break; - case EbtInt16: newOp = EOpConvInt16ToUint8; break; - case EbtUint16: newOp = EOpConvUint16ToUint8; break; - case EbtInt: newOp = EOpConvIntToUint8; break; - case EbtUint: newOp = EOpConvUintToUint8; break; - case EbtInt64: newOp = EOpConvInt64ToUint8; break; - case EbtUint64: newOp = EOpConvUint64ToUint8; break; - case EbtBool: newOp = EOpConvBoolToUint8; break; - case EbtFloat: newOp = EOpConvFloatToUint8; break; - case EbtDouble: newOp = EOpConvDoubleToUint8; break; + case EbtInt8: newOp = EOpConvInt8ToUint8; break; + case EbtInt16: newOp = EOpConvInt16ToUint8; break; + case EbtUint16: newOp = EOpConvUint16ToUint8; break; + case EbtInt: newOp = EOpConvIntToUint8; break; + case EbtUint: newOp = EOpConvUintToUint8; break; + case EbtInt64: newOp = EOpConvInt64ToUint8; break; + case EbtUint64: newOp = EOpConvUint64ToUint8; break; + case EbtBool: newOp = EOpConvBoolToUint8; break; + case EbtFloat: newOp = EOpConvFloatToUint8; break; + case EbtDouble: newOp = EOpConvDoubleToUint8; break; case EbtFloat16: newOp = EOpConvFloat16ToUint8; break; default: return nullptr; @@ -591,16 +591,16 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped case EbtInt16: switch (node->getBasicType()) { - case EbtUint8: newOp = EOpConvUint8ToInt16; break; - case EbtInt8: newOp = EOpConvInt8ToInt16; break; - case EbtUint16: newOp = EOpConvUint16ToInt16; break; - case EbtInt: newOp = EOpConvIntToInt16; break; - case EbtUint: newOp = EOpConvUintToInt16; break; - case EbtInt64: newOp = EOpConvInt64ToInt16; break; - case EbtUint64: newOp = EOpConvUint64ToInt16; break; - case EbtBool: newOp = EOpConvBoolToInt16; break; - case EbtFloat: newOp = EOpConvFloatToInt16; break; - case EbtDouble: newOp = EOpConvDoubleToInt16; break; + case EbtUint8: newOp = EOpConvUint8ToInt16; break; + case EbtInt8: newOp = EOpConvInt8ToInt16; break; + case EbtUint16: newOp = EOpConvUint16ToInt16; break; + case EbtInt: newOp = EOpConvIntToInt16; break; + case EbtUint: newOp = EOpConvUintToInt16; break; + case EbtInt64: newOp = EOpConvInt64ToInt16; break; + case EbtUint64: newOp = EOpConvUint64ToInt16; break; + case EbtBool: newOp = EOpConvBoolToInt16; break; + case EbtFloat: newOp = EOpConvFloatToInt16; break; + case EbtDouble: newOp = EOpConvDoubleToInt16; break; case EbtFloat16: newOp = EOpConvFloat16ToInt16; break; default: return nullptr; @@ -608,16 +608,16 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped break; case EbtUint16: switch (node->getBasicType()) { - case EbtInt8: newOp = EOpConvInt8ToUint16; break; - case EbtUint8: newOp = EOpConvUint8ToUint16; break; - case EbtInt16: newOp = EOpConvInt16ToUint16; break; - case EbtInt: newOp = EOpConvIntToUint16; break; - case EbtUint: newOp = EOpConvUintToUint16; break; - case EbtInt64: newOp = EOpConvInt64ToUint16; break; - case EbtUint64: newOp = EOpConvUint64ToUint16; break; - case EbtBool: newOp = EOpConvBoolToUint16; break; - case EbtFloat: newOp = EOpConvFloatToUint16; break; - case EbtDouble: newOp = EOpConvDoubleToUint16; break; + case EbtInt8: newOp = EOpConvInt8ToUint16; break; + case EbtUint8: newOp = EOpConvUint8ToUint16; break; + case EbtInt16: newOp = EOpConvInt16ToUint16; break; + case EbtInt: newOp = EOpConvIntToUint16; break; + case EbtUint: newOp = EOpConvUintToUint16; break; + case EbtInt64: newOp = EOpConvInt64ToUint16; break; + case EbtUint64: newOp = EOpConvUint64ToUint16; break; + case EbtBool: newOp = EOpConvBoolToUint16; break; + case EbtFloat: newOp = EOpConvFloatToUint16; break; + case EbtDouble: newOp = EOpConvDoubleToUint16; break; case EbtFloat16: newOp = EOpConvFloat16ToUint16; break; default: return nullptr; @@ -626,68 +626,68 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped case EbtInt: switch (node->getBasicType()) { - case EbtInt8: newOp = EOpConvInt8ToInt; break; - case EbtUint8: newOp = EOpConvUint8ToInt; break; - case EbtInt16: newOp = EOpConvInt16ToInt; break; - case EbtUint16: newOp = EOpConvUint16ToInt; break; - case EbtUint: newOp = EOpConvUintToInt; break; - case EbtBool: newOp = EOpConvBoolToInt; break; - case EbtFloat: newOp = EOpConvFloatToInt; break; - case EbtDouble: newOp = EOpConvDoubleToInt; break; + case EbtInt8: newOp = EOpConvInt8ToInt; break; + case EbtUint8: newOp = EOpConvUint8ToInt; break; + case EbtInt16: newOp = EOpConvInt16ToInt; break; + case EbtUint16: newOp = EOpConvUint16ToInt; break; + case EbtUint: newOp = EOpConvUintToInt; break; + case EbtBool: newOp = EOpConvBoolToInt; break; + case EbtFloat: newOp = EOpConvFloatToInt; break; + case EbtDouble: newOp = EOpConvDoubleToInt; break; case EbtFloat16: newOp = EOpConvFloat16ToInt; break; - case EbtInt64: newOp = EOpConvInt64ToInt; break; - case EbtUint64: newOp = EOpConvUint64ToInt; break; + case EbtInt64: newOp = EOpConvInt64ToInt; break; + case EbtUint64: newOp = EOpConvUint64ToInt; break; default: return nullptr; } break; case EbtUint: switch (node->getBasicType()) { - case EbtInt8: newOp = EOpConvInt8ToUint; break; - case EbtUint8: newOp = EOpConvUint8ToUint; break; - case EbtInt16: newOp = EOpConvInt16ToUint; break; - case EbtUint16: newOp = EOpConvUint16ToUint; break; - case EbtInt: newOp = EOpConvIntToUint; break; - case EbtBool: newOp = EOpConvBoolToUint; break; - case EbtFloat: newOp = EOpConvFloatToUint; break; - case EbtDouble: newOp = EOpConvDoubleToUint; break; + case EbtInt8: newOp = EOpConvInt8ToUint; break; + case EbtUint8: newOp = EOpConvUint8ToUint; break; + case EbtInt16: newOp = EOpConvInt16ToUint; break; + case EbtUint16: newOp = EOpConvUint16ToUint; break; + case EbtInt: newOp = EOpConvIntToUint; break; + case EbtBool: newOp = EOpConvBoolToUint; break; + case EbtFloat: newOp = EOpConvFloatToUint; break; + case EbtDouble: newOp = EOpConvDoubleToUint; break; case EbtFloat16: newOp = EOpConvFloat16ToUint; break; - case EbtInt64: newOp = EOpConvInt64ToUint; break; - case EbtUint64: newOp = EOpConvUint64ToUint; break; + case EbtInt64: newOp = EOpConvInt64ToUint; break; + case EbtUint64: newOp = EOpConvUint64ToUint; break; default: return nullptr; } break; case EbtInt64: switch (node->getBasicType()) { - case EbtInt8: newOp = EOpConvInt8ToInt64; break; - case EbtUint8: newOp = EOpConvUint8ToInt64; break; - case EbtInt16: newOp = EOpConvInt16ToInt64; break; - case EbtUint16: newOp = EOpConvUint16ToInt64; break; - case EbtInt: newOp = EOpConvIntToInt64; break; - case EbtUint: newOp = EOpConvUintToInt64; break; - case EbtBool: newOp = EOpConvBoolToInt64; break; - case EbtFloat: newOp = EOpConvFloatToInt64; break; - case EbtDouble: newOp = EOpConvDoubleToInt64; break; + case EbtInt8: newOp = EOpConvInt8ToInt64; break; + case EbtUint8: newOp = EOpConvUint8ToInt64; break; + case EbtInt16: newOp = EOpConvInt16ToInt64; break; + case EbtUint16: newOp = EOpConvUint16ToInt64; break; + case EbtInt: newOp = EOpConvIntToInt64; break; + case EbtUint: newOp = EOpConvUintToInt64; break; + case EbtBool: newOp = EOpConvBoolToInt64; break; + case EbtFloat: newOp = EOpConvFloatToInt64; break; + case EbtDouble: newOp = EOpConvDoubleToInt64; break; case EbtFloat16: newOp = EOpConvFloat16ToInt64; break; - case EbtUint64: newOp = EOpConvUint64ToInt64; break; + case EbtUint64: newOp = EOpConvUint64ToInt64; break; default: return nullptr; } break; case EbtUint64: switch (node->getBasicType()) { - case EbtInt8: newOp = EOpConvInt8ToUint64; break; - case EbtUint8: newOp = EOpConvUint8ToUint64; break; - case EbtInt16: newOp = EOpConvInt16ToUint64; break; - case EbtUint16: newOp = EOpConvUint16ToUint64; break; - case EbtInt: newOp = EOpConvIntToUint64; break; - case EbtUint: newOp = EOpConvUintToUint64; break; - case EbtBool: newOp = EOpConvBoolToUint64; break; - case EbtFloat: newOp = EOpConvFloatToUint64; break; - case EbtDouble: newOp = EOpConvDoubleToUint64; break; + case EbtInt8: newOp = EOpConvInt8ToUint64; break; + case EbtUint8: newOp = EOpConvUint8ToUint64; break; + case EbtInt16: newOp = EOpConvInt16ToUint64; break; + case EbtUint16: newOp = EOpConvUint16ToUint64; break; + case EbtInt: newOp = EOpConvIntToUint64; break; + case EbtUint: newOp = EOpConvUintToUint64; break; + case EbtBool: newOp = EOpConvBoolToUint64; break; + case EbtFloat: newOp = EOpConvFloatToUint64; break; + case EbtDouble: newOp = EOpConvDoubleToUint64; break; case EbtFloat16: newOp = EOpConvFloat16ToUint64; break; - case EbtInt64: newOp = EOpConvInt64ToUint64; break; + case EbtInt64: newOp = EOpConvInt64ToUint64; break; default: return nullptr; } @@ -714,25 +714,34 @@ TIntermUnary* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped return newNode; } +// For converting a pair of operands to a binary operation to compatible +// types with each other, relative to the operation in 'op'. +// This does not cover assignment operations, which is asymmetric in that the +// left type is not changeable. +// See addConversion(op, type, node) for assignments and unary operation +// conversions. +// +// Generally, this is focused on basic type conversion, not shape conversion. +// See addShapeConversion() for shape conversions. +// +// Returns the converted pair of nodes. +// Returns when there is no conversion. std::tuple TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1) const { - if (!isConversionAllowed(op, node0) || !isConversionAllowed(op, node1)) { + if (!isConversionAllowed(op, node0) || !isConversionAllowed(op, node1)) return std::make_tuple(nullptr, nullptr); + + if (node0->getType() != node1->getType()) { + // If differing structure, then no conversions. + if (node0->isStruct() || node1->isStruct()) + return std::make_tuple(nullptr, nullptr); + + // If differing arrays, then no conversions. + if (node0->getType().isArray() || node1->getType().isArray()) + return std::make_tuple(nullptr, nullptr); } - // If types are identical, no problem - if (node0->getType() == node1->getType()) - return std::make_tuple(node0, node1); - - // If one's a structure, then no conversions. - if (node0->isStruct() || node1->isStruct()) - return std::make_tuple(nullptr, nullptr); - - // If one's an array, then no conversions. - if (node0->getType().isArray() || node1->getType().isArray()) - return std::make_tuple(nullptr, nullptr); - auto promoteTo = std::make_tuple(EbtNumTypes, EbtNumTypes); TBasicType type0 = node0->getType().getBasicType(); @@ -767,11 +776,8 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no case EOpAndAssign: case EOpInclusiveOrAssign: case EOpExclusiveOrAssign: - case EOpLogicalNot: - case EOpLogicalAnd: - case EOpLogicalOr: - case EOpLogicalXor: + case EOpLogicalNot: case EOpFunctionCall: case EOpReturn: case EOpAssign: @@ -782,7 +788,6 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no case EOpMatrixTimesScalarAssign: case EOpDivAssign: case EOpModAssign: - case EOpAtan: case EOpClamp: case EOpCross: @@ -803,10 +808,10 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no case EOpRefract: case EOpSmoothStep: case EOpStep: - - case EOpSequence: case EOpConstructStruct: + case EOpSequence: // used by ?: + if (type0 == type1) return std::make_tuple(node0, node1); @@ -816,6 +821,15 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no break; + case EOpLogicalAnd: + case EOpLogicalOr: + case EOpLogicalXor: + if (source == EShSourceHlsl) + promoteTo = std::make_tuple(EbtBool, EbtBool); + else + return std::make_tuple(node0, node1); + break; + // Shifts can have mixed types as long as they are integer and of the same rank, // without converting. // It's the left operand's type that determines the resulting type, so no issue @@ -824,6 +838,8 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no case EOpRightShift: case EOpLeftShiftAssign: case EOpRightShiftAssign: + if (node0->getType() == node1->getType()) + return std::make_tuple(node0, node1); if (isTypeInt(type0) && isTypeInt(type1)) { if (getTypeRank(type0) == getTypeRank(type1)) { @@ -838,6 +854,9 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no break; default: + if (node0->getType() == node1->getType()) + return std::make_tuple(node0, node1); + return std::make_tuple(nullptr, nullptr); } @@ -872,7 +891,7 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no // node passed in if no conversion was needed. // // Generally, this is focused on basic type conversion, not shape conversion. -// See addShapeConversion(). +// See addShapeConversion() for shape conversions. // // Return nullptr if a conversion can't be done. // @@ -2952,7 +2971,7 @@ bool TIntermediate::promoteUnary(TIntermUnary& node) // Convert operand to a boolean type if (operand->getBasicType() != EbtBool) { // Add constructor to boolean type. If that fails, we can't do it, so return false. - TIntermTyped* converted = convertToBasicType(op, EbtBool, operand); + TIntermTyped* converted = addConversion(op, TType(EbtBool), operand); if (converted == nullptr) return false; @@ -2997,24 +3016,6 @@ void TIntermUnary::updatePrecision() } } -// If it is not already, convert this node to the given basic type. -TIntermTyped* TIntermediate::convertToBasicType(TOperator op, TBasicType basicType, TIntermTyped* node) const -{ - if (node == nullptr) - return nullptr; - - // It's already this basic type: nothing needs to be done, so use the node directly. - if (node->getBasicType() == basicType) - return node; - - const TType& type = node->getType(); - const TType newType(basicType, type.getQualifier().storage, - type.getVectorSize(), type.getMatrixCols(), type.getMatrixRows(), type.isVector()); - - // Add constructor to the right vectorness of the right type. If that fails, we can't do it, so return nullptr. - return addConversion(op, newType, node); -} - // // See TIntermediate::promote // @@ -3139,21 +3140,17 @@ bool TIntermediate::promoteBinary(TIntermBinary& node) case EOpLogicalAnd: case EOpLogicalOr: case EOpLogicalXor: - if (getSource() == EShSourceHlsl) { - TIntermTyped* convertedL = convertToBasicType(op, EbtBool, left); - TIntermTyped* convertedR = convertToBasicType(op, EbtBool, right); - if (convertedL == nullptr || convertedR == nullptr) + // logical ops operate only on Booleans or vectors of Booleans. + if (left->getBasicType() != EbtBool || left->isMatrix()) return false; - node.setLeft(left = convertedL); // also updates stack variable - node.setRight(right = convertedR); // also updates stack variable - } else { + + if (getSource() == EShSourceGlsl) { // logical ops operate only on scalar Booleans and will promote to scalar Boolean. - if (left->getBasicType() != EbtBool || left->isVector() || left->isMatrix()) + if (left->isVector()) return false; } node.setType(TType(EbtBool, EvqTemporary, left->getVectorSize())); - break; case EOpRightShift: diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 8458e990..46650da4 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -459,9 +459,6 @@ public: TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc) const; TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc, const TType&) const; - // Add conversion from node's type to given basic type. - TIntermTyped* convertToBasicType(TOperator op, TBasicType basicType, TIntermTyped* node) const; - // Constant folding (in Constant.cpp) TIntermTyped* fold(TIntermAggregate* aggrNode); TIntermTyped* foldConstructor(TIntermAggregate* aggrNode); From 6e899be5ec99b7dd9b3c15c2aebe692e88a2fb65 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Thu, 15 Mar 2018 19:52:33 -0600 Subject: [PATCH 10/21] Non-functional: Rationalize operators handled by the split addConversion() functions. Historically, addConversion() was split to handle binary node <-> node conversions from non-binary node -> type conversions. However, the split wasn't entirely clean WRT HLSL design and left duplication of case statements, which are misleading, and this commit cleans up. --- glslang/MachineIndependent/Intermediate.cpp | 85 +++------------------ 1 file changed, 10 insertions(+), 75 deletions(-) diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 5c67f1dd..2415f6a4 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -773,42 +773,6 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no case EOpAnd: case EOpInclusiveOr: case EOpExclusiveOr: - case EOpAndAssign: - case EOpInclusiveOrAssign: - case EOpExclusiveOrAssign: - - case EOpLogicalNot: - case EOpFunctionCall: - case EOpReturn: - case EOpAssign: - case EOpAddAssign: - case EOpSubAssign: - case EOpMulAssign: - case EOpVectorTimesScalarAssign: - case EOpMatrixTimesScalarAssign: - case EOpDivAssign: - case EOpModAssign: - case EOpAtan: - case EOpClamp: - case EOpCross: - case EOpDistance: - case EOpDot: - case EOpDst: - case EOpFaceForward: - case EOpFma: - case EOpFrexp: - case EOpLdexp: - case EOpMix: - case EOpLit: - case EOpMax: - case EOpMin: - case EOpModf: - case EOpPow: - case EOpReflect: - case EOpRefract: - case EOpSmoothStep: - case EOpStep: - case EOpConstructStruct: case EOpSequence: // used by ?: @@ -832,12 +796,8 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no // Shifts can have mixed types as long as they are integer and of the same rank, // without converting. - // It's the left operand's type that determines the resulting type, so no issue - // with assign shift ops either. case EOpLeftShift: case EOpRightShift: - case EOpLeftShiftAssign: - case EOpRightShiftAssign: if (node0->getType() == node1->getType()) return std::make_tuple(node0, node1); @@ -887,6 +847,8 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no // For implicit conversions, 'op' is not the requested conversion, it is the explicit // operation requiring the implicit conversion. // +// Binary operation conversions should be handled by addConversion(op, node, node), not here. +// // Returns a node representing the conversion, which could be the same // node passed in if no conversion was needed. // @@ -958,40 +920,10 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt promoteTo = EbtUint64; break; - // - // List all the binary ops that can implicitly convert one operand to the other's type; - // This implements the 'policy' for implicit type conversion. - // - case EOpLessThan: - case EOpGreaterThan: - case EOpLessThanEqual: - case EOpGreaterThanEqual: - case EOpEqual: - case EOpNotEqual: - - case EOpAdd: - case EOpSub: - case EOpMul: - case EOpDiv: - case EOpMod: - - case EOpVectorTimesScalar: - case EOpVectorTimesMatrix: - case EOpMatrixTimesVector: - case EOpMatrixTimesScalar: - - case EOpAnd: - case EOpInclusiveOr: - case EOpExclusiveOr: - case EOpAndAssign: - case EOpInclusiveOrAssign: - case EOpExclusiveOrAssign: case EOpLogicalNot: - case EOpLogicalAnd: - case EOpLogicalOr: - case EOpLogicalXor: case EOpFunctionCall: + case EOpReturn: case EOpAssign: case EOpAddAssign: @@ -1001,6 +933,9 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt case EOpMatrixTimesScalarAssign: case EOpDivAssign: case EOpModAssign: + case EOpAndAssign: + case EOpInclusiveOrAssign: + case EOpExclusiveOrAssign: case EOpAtan: case EOpClamp: @@ -1039,8 +974,6 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt // without converting. // It's the left operand's type that determines the resulting type, so no issue // with assign shift ops either. - case EOpLeftShift: - case EOpRightShift: case EOpLeftShiftAssign: case EOpRightShiftAssign: { @@ -3088,8 +3021,10 @@ bool TIntermediate::promoteBinary(TIntermBinary& node) case EOpSub: case EOpDiv: case EOpMul: - left = addConversion(op, TType(EbtInt, EvqTemporary, left->getVectorSize()), left); - right = addConversion(op, TType(EbtInt, EvqTemporary, right->getVectorSize()), right); + if (left->getBasicType() == EbtBool) + left = createConversion(EbtInt, left); + if (right->getBasicType() == EbtBool) + right = createConversion(EbtInt, right); if (left == nullptr || right == nullptr) return false; node.setLeft(left); From 647fccaf2f8572430c2fb3fa305027717834e759 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Thu, 15 Mar 2018 21:07:35 -0600 Subject: [PATCH 11/21] AST: Fix shift conversions, which don't require matching types. The base and shift amount need to be integers, but not of the same type. This fixes #1296 and replaces #1297. --- Test/baseResults/spv.int16.frag.out | 674 ++++++++-------- Test/baseResults/spv.int32.frag.out | 662 ++++++++-------- Test/baseResults/spv.int64.frag.out | 731 +++++++++--------- Test/baseResults/spv.rankShift.comp.out | 57 ++ Test/baseResults/spv.vulkan110.int16.frag.out | 674 ++++++++-------- Test/spv.int64.frag | 2 + Test/spv.rankShift.comp | 15 + glslang/MachineIndependent/Intermediate.cpp | 72 +- gtests/Spv.FromFile.cpp | 1 + 9 files changed, 1475 insertions(+), 1413 deletions(-) create mode 100755 Test/baseResults/spv.rankShift.comp.out create mode 100644 Test/spv.rankShift.comp diff --git a/Test/baseResults/spv.int16.frag.out b/Test/baseResults/spv.int16.frag.out index 22f51380..83555691 100644 --- a/Test/baseResults/spv.int16.frag.out +++ b/Test/baseResults/spv.int16.frag.out @@ -1,7 +1,7 @@ spv.int16.frag // Module Version 10000 // Generated by (magic number): 80006 -// Id's are bound by 525 +// Id's are bound by 523 Capability Shader Capability Float16 @@ -55,48 +55,48 @@ spv.int16.frag Name 220 "i" Name 227 "uv" Name 243 "i64" - Name 283 "b" - Name 345 "i16v" - Name 348 "i16" - Name 358 "u16v" - Name 360 "u16" - Name 430 "i32" - Name 433 "i64" - Name 436 "i16v4" - Name 439 "u32" - Name 440 "u16v2" - Name 444 "u64" - Name 447 "u16v4" - Name 459 "bv" - Name 520 "Block" - MemberName 520(Block) 0 "i16" - MemberName 520(Block) 1 "i16v2" - MemberName 520(Block) 2 "i16v3" - MemberName 520(Block) 3 "i16v4" - MemberName 520(Block) 4 "u16" - MemberName 520(Block) 5 "u16v2" - MemberName 520(Block) 6 "u16v3" - MemberName 520(Block) 7 "u16v4" - Name 522 "block" - Name 523 "si16" - Name 524 "su16" + Name 281 "b" + Name 343 "i16v" + Name 346 "i16" + Name 356 "u16v" + Name 358 "u16" + Name 428 "i32" + Name 431 "i64" + Name 434 "i16v4" + Name 437 "u32" + Name 438 "u16v2" + Name 442 "u64" + Name 445 "u16v4" + Name 457 "bv" + Name 518 "Block" + MemberName 518(Block) 0 "i16" + MemberName 518(Block) 1 "i16v2" + MemberName 518(Block) 2 "i16v3" + MemberName 518(Block) 3 "i16v4" + MemberName 518(Block) 4 "u16" + MemberName 518(Block) 5 "u16v2" + MemberName 518(Block) 6 "u16v3" + MemberName 518(Block) 7 "u16v4" + Name 520 "block" + Name 521 "si16" + Name 522 "su16" MemberDecorate 24(Uniforms) 0 Offset 0 Decorate 24(Uniforms) Block Decorate 26 DescriptorSet 0 Decorate 26 Binding 0 - MemberDecorate 520(Block) 0 Offset 0 - MemberDecorate 520(Block) 1 Offset 4 - MemberDecorate 520(Block) 2 Offset 8 - MemberDecorate 520(Block) 3 Offset 16 - MemberDecorate 520(Block) 4 Offset 24 - MemberDecorate 520(Block) 5 Offset 28 - MemberDecorate 520(Block) 6 Offset 32 - MemberDecorate 520(Block) 7 Offset 40 - Decorate 520(Block) Block - Decorate 522(block) DescriptorSet 0 - Decorate 522(block) Binding 1 - Decorate 523(si16) SpecId 100 - Decorate 524(su16) SpecId 101 + MemberDecorate 518(Block) 0 Offset 0 + MemberDecorate 518(Block) 1 Offset 4 + MemberDecorate 518(Block) 2 Offset 8 + MemberDecorate 518(Block) 3 Offset 16 + MemberDecorate 518(Block) 4 Offset 24 + MemberDecorate 518(Block) 5 Offset 28 + MemberDecorate 518(Block) 6 Offset 32 + MemberDecorate 518(Block) 7 Offset 40 + Decorate 518(Block) Block + Decorate 520(block) DescriptorSet 0 + Decorate 520(block) Binding 1 + Decorate 521(si16) SpecId 100 + Decorate 522(su16) SpecId 101 2: TypeVoid 3: TypeFunction 2 14: TypeInt 16 1 @@ -171,28 +171,28 @@ spv.int16.frag 242: TypePointer Function 71(int) 264: 17(int) Constant 1 270: 17(int) Constant 2 - 275: TypeVector 27(int) 3 - 282: TypePointer Function 173(bool) - 284: 17(int) Constant 0 - 298: TypePointer Function 17(int) - 356: 52(ivec2) ConstantComposite 21 21 - 365: 193(ivec3) ConstantComposite 184 184 184 - 407: 173(bool) ConstantTrue - 414: 173(bool) ConstantFalse - 415: 174(bvec2) ConstantComposite 414 414 - 427: TypeVector 173(bool) 3 - 428: 427(bvec3) ConstantComposite 414 414 414 - 434: TypeVector 14(int) 4 - 435: TypePointer Function 434(ivec4) - 443: TypePointer Function 77(int) - 445: TypeVector 36(int) 4 - 446: TypePointer Function 445(ivec4) - 458: TypePointer Function 427(bvec3) - 520(Block): TypeStruct 14(int) 52(ivec2) 197(ivec3) 434(ivec4) 36(int) 57(ivec2) 193(ivec3) 445(ivec4) - 521: TypePointer Uniform 520(Block) - 522(block): 521(ptr) Variable Uniform - 523(si16): 14(int) SpecConstant 4294967286 - 524(su16): 36(int) SpecConstant 20 + 276: TypeVector 27(int) 3 + 280: TypePointer Function 173(bool) + 282: 17(int) Constant 0 + 296: TypePointer Function 17(int) + 354: 52(ivec2) ConstantComposite 21 21 + 363: 193(ivec3) ConstantComposite 184 184 184 + 405: 173(bool) ConstantTrue + 412: 173(bool) ConstantFalse + 413: 174(bvec2) ConstantComposite 412 412 + 425: TypeVector 173(bool) 3 + 426: 425(bvec3) ConstantComposite 412 412 412 + 432: TypeVector 14(int) 4 + 433: TypePointer Function 432(ivec4) + 441: TypePointer Function 77(int) + 443: TypeVector 36(int) 4 + 444: TypePointer Function 443(ivec4) + 456: TypePointer Function 425(bvec3) + 518(Block): TypeStruct 14(int) 52(ivec2) 197(ivec3) 432(ivec4) 36(int) 57(ivec2) 193(ivec3) 443(ivec4) + 519: TypePointer Uniform 518(Block) + 520(block): 519(ptr) Variable Uniform + 521(si16): 14(int) SpecConstant 4294967286 + 522(su16): 36(int) SpecConstant 20 4(main): 2 Function None 3 5: Label Return @@ -371,7 +371,7 @@ spv.int16.frag 220(i): 219(ptr) Variable Function 227(uv): 226(ptr) Variable Function 243(i64): 242(ptr) Variable Function - 283(b): 282(ptr) Variable Function + 281(b): 280(ptr) Variable Function 196: 193(ivec3) Load 195(u16v) 198: 197(ivec3) CompositeConstruct 179 179 179 199: 193(ivec3) IAdd 196 198 @@ -460,287 +460,285 @@ spv.int16.frag 273: 14(int) ShiftLeftLogical 269 272 Store 200(i16) 273 274: 193(ivec3) Load 195(u16v) - 276: 275(ivec3) UConvert 274 - 277: 275(ivec3) Bitcast 276 - 278: 27(int) Load 220(i) - 279: 275(ivec3) CompositeConstruct 278 278 278 - 280: 275(ivec3) ShiftLeftLogical 277 279 - 281: 225(ivec3) Bitcast 280 - Store 227(uv) 281 - 285: 37(ptr) AccessChain 195(u16v) 284 - 286: 36(int) Load 285 - 287: 14(int) Load 200(i16) - 288: 36(int) Bitcast 287 - 289: 173(bool) INotEqual 286 288 - Store 283(b) 289 - 290: 14(int) Load 200(i16) - 291: 36(int) Bitcast 290 - 292: 37(ptr) AccessChain 195(u16v) 284 - 293: 36(int) Load 292 - 294: 173(bool) IEqual 291 293 - Store 283(b) 294 - 295: 37(ptr) AccessChain 195(u16v) 284 - 296: 36(int) Load 295 - 297: 17(int) UConvert 296 - 299: 298(ptr) AccessChain 227(uv) 264 - 300: 17(int) Load 299 - 301: 173(bool) UGreaterThan 297 300 - Store 283(b) 301 - 302: 14(int) Load 200(i16) - 303: 27(int) SConvert 302 - 304: 27(int) Load 220(i) - 305: 173(bool) SLessThan 303 304 - Store 283(b) 305 - 306: 37(ptr) AccessChain 195(u16v) 264 - 307: 36(int) Load 306 - 308: 17(int) UConvert 307 - 309: 298(ptr) AccessChain 227(uv) 284 - 310: 17(int) Load 309 - 311: 173(bool) UGreaterThanEqual 308 310 - Store 283(b) 311 - 312: 14(int) Load 200(i16) - 313: 27(int) SConvert 312 - 314: 27(int) Load 220(i) - 315: 173(bool) SLessThanEqual 313 314 - Store 283(b) 315 - 316: 14(int) Load 200(i16) - 317: 27(int) SConvert 316 - 318: 17(int) Bitcast 317 - 319: 225(ivec3) Load 227(uv) - 320: 225(ivec3) CompositeConstruct 318 318 318 - 321: 225(ivec3) BitwiseOr 319 320 - Store 227(uv) 321 - 322: 14(int) Load 200(i16) - 323: 27(int) SConvert 322 - 324: 27(int) Load 220(i) - 325: 27(int) BitwiseOr 323 324 - Store 220(i) 325 - 326: 14(int) Load 200(i16) - 327: 71(int) SConvert 326 - 328: 71(int) Load 243(i64) - 329: 71(int) BitwiseAnd 328 327 - Store 243(i64) 329 - 330: 193(ivec3) Load 195(u16v) - 331: 225(ivec3) UConvert 330 - 332: 225(ivec3) Load 227(uv) - 333: 225(ivec3) BitwiseAnd 331 332 - Store 227(uv) 333 - 334: 14(int) Load 200(i16) - 335: 27(int) SConvert 334 - 336: 17(int) Bitcast 335 - 337: 225(ivec3) Load 227(uv) - 338: 225(ivec3) CompositeConstruct 336 336 336 - 339: 225(ivec3) BitwiseXor 337 338 - Store 227(uv) 339 - 340: 193(ivec3) Load 195(u16v) - 341: 14(int) Load 200(i16) - 342: 36(int) Bitcast 341 - 343: 193(ivec3) CompositeConstruct 342 342 342 - 344: 193(ivec3) BitwiseXor 340 343 - Store 195(u16v) 344 + 275: 27(int) Load 220(i) + 277: 276(ivec3) CompositeConstruct 275 275 275 + 278: 193(ivec3) ShiftLeftLogical 274 277 + 279: 225(ivec3) UConvert 278 + Store 227(uv) 279 + 283: 37(ptr) AccessChain 195(u16v) 282 + 284: 36(int) Load 283 + 285: 14(int) Load 200(i16) + 286: 36(int) Bitcast 285 + 287: 173(bool) INotEqual 284 286 + Store 281(b) 287 + 288: 14(int) Load 200(i16) + 289: 36(int) Bitcast 288 + 290: 37(ptr) AccessChain 195(u16v) 282 + 291: 36(int) Load 290 + 292: 173(bool) IEqual 289 291 + Store 281(b) 292 + 293: 37(ptr) AccessChain 195(u16v) 282 + 294: 36(int) Load 293 + 295: 17(int) UConvert 294 + 297: 296(ptr) AccessChain 227(uv) 264 + 298: 17(int) Load 297 + 299: 173(bool) UGreaterThan 295 298 + Store 281(b) 299 + 300: 14(int) Load 200(i16) + 301: 27(int) SConvert 300 + 302: 27(int) Load 220(i) + 303: 173(bool) SLessThan 301 302 + Store 281(b) 303 + 304: 37(ptr) AccessChain 195(u16v) 264 + 305: 36(int) Load 304 + 306: 17(int) UConvert 305 + 307: 296(ptr) AccessChain 227(uv) 282 + 308: 17(int) Load 307 + 309: 173(bool) UGreaterThanEqual 306 308 + Store 281(b) 309 + 310: 14(int) Load 200(i16) + 311: 27(int) SConvert 310 + 312: 27(int) Load 220(i) + 313: 173(bool) SLessThanEqual 311 312 + Store 281(b) 313 + 314: 14(int) Load 200(i16) + 315: 27(int) SConvert 314 + 316: 17(int) Bitcast 315 + 317: 225(ivec3) Load 227(uv) + 318: 225(ivec3) CompositeConstruct 316 316 316 + 319: 225(ivec3) BitwiseOr 317 318 + Store 227(uv) 319 + 320: 14(int) Load 200(i16) + 321: 27(int) SConvert 320 + 322: 27(int) Load 220(i) + 323: 27(int) BitwiseOr 321 322 + Store 220(i) 323 + 324: 14(int) Load 200(i16) + 325: 71(int) SConvert 324 + 326: 71(int) Load 243(i64) + 327: 71(int) BitwiseAnd 326 325 + Store 243(i64) 327 + 328: 193(ivec3) Load 195(u16v) + 329: 225(ivec3) UConvert 328 + 330: 225(ivec3) Load 227(uv) + 331: 225(ivec3) BitwiseAnd 329 330 + Store 227(uv) 331 + 332: 14(int) Load 200(i16) + 333: 27(int) SConvert 332 + 334: 17(int) Bitcast 333 + 335: 225(ivec3) Load 227(uv) + 336: 225(ivec3) CompositeConstruct 334 334 334 + 337: 225(ivec3) BitwiseXor 335 336 + Store 227(uv) 337 + 338: 193(ivec3) Load 195(u16v) + 339: 14(int) Load 200(i16) + 340: 36(int) Bitcast 339 + 341: 193(ivec3) CompositeConstruct 340 340 340 + 342: 193(ivec3) BitwiseXor 338 341 + Store 195(u16v) 342 Return FunctionEnd 12(builtinFuncs(): 2 Function None 3 13: Label - 345(i16v): 53(ptr) Variable Function - 348(i16): 15(ptr) Variable Function - 358(u16v): 194(ptr) Variable Function - 360(u16): 37(ptr) Variable Function - 430(i32): 219(ptr) Variable Function - 433(i64): 242(ptr) Variable Function - 436(i16v4): 435(ptr) Variable Function - 439(u32): 298(ptr) Variable Function - 440(u16v2): 58(ptr) Variable Function - 444(u64): 443(ptr) Variable Function - 447(u16v4): 446(ptr) Variable Function - 459(bv): 458(ptr) Variable Function - 346: 52(ivec2) Load 345(i16v) - 347: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 346 - Store 345(i16v) 347 - 349: 14(int) Load 348(i16) - 350: 14(int) ExtInst 1(GLSL.std.450) 7(SSign) 349 - Store 348(i16) 350 - 351: 52(ivec2) Load 345(i16v) - 352: 14(int) Load 348(i16) - 353: 52(ivec2) CompositeConstruct 352 352 - 354: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 351 353 - Store 345(i16v) 354 - 355: 52(ivec2) Load 345(i16v) - 357: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 355 356 - Store 345(i16v) 357 - 359: 193(ivec3) Load 358(u16v) - 361: 36(int) Load 360(u16) - 362: 193(ivec3) CompositeConstruct 361 361 361 - 363: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 359 362 - Store 358(u16v) 363 - 364: 193(ivec3) Load 358(u16v) - 366: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 364 365 - Store 358(u16v) 366 - 367: 52(ivec2) Load 345(i16v) - 368: 14(int) Load 348(i16) - 369: 52(ivec2) CompositeConstruct 368 368 - 370: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 367 369 - Store 345(i16v) 370 - 371: 52(ivec2) Load 345(i16v) - 372: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 371 356 - Store 345(i16v) 372 - 373: 193(ivec3) Load 358(u16v) - 374: 36(int) Load 360(u16) - 375: 193(ivec3) CompositeConstruct 374 374 374 - 376: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 373 375 - Store 358(u16v) 376 - 377: 193(ivec3) Load 358(u16v) - 378: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 377 365 - Store 358(u16v) 378 - 379: 52(ivec2) Load 345(i16v) - 380: 14(int) Load 348(i16) - 381: 14(int) SNegate 380 - 382: 14(int) Load 348(i16) - 383: 52(ivec2) CompositeConstruct 381 381 - 384: 52(ivec2) CompositeConstruct 382 382 - 385: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 379 383 384 - Store 345(i16v) 385 - 386: 52(ivec2) Load 345(i16v) - 387: 52(ivec2) Load 345(i16v) - 388: 52(ivec2) SNegate 387 - 389: 52(ivec2) Load 345(i16v) - 390: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 386 388 389 - Store 345(i16v) 390 - 391: 193(ivec3) Load 358(u16v) - 392: 36(int) Load 360(u16) - 393: 36(int) SNegate 392 - 394: 36(int) Load 360(u16) - 395: 193(ivec3) CompositeConstruct 393 393 393 - 396: 193(ivec3) CompositeConstruct 394 394 394 - 397: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 391 395 396 - Store 358(u16v) 397 - 398: 193(ivec3) Load 358(u16v) - 399: 193(ivec3) Load 358(u16v) - 400: 193(ivec3) SNegate 399 - 401: 193(ivec3) Load 358(u16v) - 402: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 398 400 401 - Store 358(u16v) 402 - 403: 15(ptr) AccessChain 345(i16v) 284 + 343(i16v): 53(ptr) Variable Function + 346(i16): 15(ptr) Variable Function + 356(u16v): 194(ptr) Variable Function + 358(u16): 37(ptr) Variable Function + 428(i32): 219(ptr) Variable Function + 431(i64): 242(ptr) Variable Function + 434(i16v4): 433(ptr) Variable Function + 437(u32): 296(ptr) Variable Function + 438(u16v2): 58(ptr) Variable Function + 442(u64): 441(ptr) Variable Function + 445(u16v4): 444(ptr) Variable Function + 457(bv): 456(ptr) Variable Function + 344: 52(ivec2) Load 343(i16v) + 345: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 344 + Store 343(i16v) 345 + 347: 14(int) Load 346(i16) + 348: 14(int) ExtInst 1(GLSL.std.450) 7(SSign) 347 + Store 346(i16) 348 + 349: 52(ivec2) Load 343(i16v) + 350: 14(int) Load 346(i16) + 351: 52(ivec2) CompositeConstruct 350 350 + 352: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 349 351 + Store 343(i16v) 352 + 353: 52(ivec2) Load 343(i16v) + 355: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 353 354 + Store 343(i16v) 355 + 357: 193(ivec3) Load 356(u16v) + 359: 36(int) Load 358(u16) + 360: 193(ivec3) CompositeConstruct 359 359 359 + 361: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 357 360 + Store 356(u16v) 361 + 362: 193(ivec3) Load 356(u16v) + 364: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 362 363 + Store 356(u16v) 364 + 365: 52(ivec2) Load 343(i16v) + 366: 14(int) Load 346(i16) + 367: 52(ivec2) CompositeConstruct 366 366 + 368: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 365 367 + Store 343(i16v) 368 + 369: 52(ivec2) Load 343(i16v) + 370: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 369 354 + Store 343(i16v) 370 + 371: 193(ivec3) Load 356(u16v) + 372: 36(int) Load 358(u16) + 373: 193(ivec3) CompositeConstruct 372 372 372 + 374: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 371 373 + Store 356(u16v) 374 + 375: 193(ivec3) Load 356(u16v) + 376: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 375 363 + Store 356(u16v) 376 + 377: 52(ivec2) Load 343(i16v) + 378: 14(int) Load 346(i16) + 379: 14(int) SNegate 378 + 380: 14(int) Load 346(i16) + 381: 52(ivec2) CompositeConstruct 379 379 + 382: 52(ivec2) CompositeConstruct 380 380 + 383: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 377 381 382 + Store 343(i16v) 383 + 384: 52(ivec2) Load 343(i16v) + 385: 52(ivec2) Load 343(i16v) + 386: 52(ivec2) SNegate 385 + 387: 52(ivec2) Load 343(i16v) + 388: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 384 386 387 + Store 343(i16v) 388 + 389: 193(ivec3) Load 356(u16v) + 390: 36(int) Load 358(u16) + 391: 36(int) SNegate 390 + 392: 36(int) Load 358(u16) + 393: 193(ivec3) CompositeConstruct 391 391 391 + 394: 193(ivec3) CompositeConstruct 392 392 392 + 395: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 389 393 394 + Store 356(u16v) 395 + 396: 193(ivec3) Load 356(u16v) + 397: 193(ivec3) Load 356(u16v) + 398: 193(ivec3) SNegate 397 + 399: 193(ivec3) Load 356(u16v) + 400: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 396 398 399 + Store 356(u16v) 400 + 401: 15(ptr) AccessChain 343(i16v) 282 + 402: 14(int) Load 401 + 403: 15(ptr) AccessChain 343(i16v) 264 404: 14(int) Load 403 - 405: 15(ptr) AccessChain 345(i16v) 264 - 406: 14(int) Load 405 - 408: 14(int) Select 407 406 404 - Store 348(i16) 408 - 409: 14(int) Load 348(i16) - 410: 52(ivec2) CompositeConstruct 409 409 - 411: 14(int) Load 348(i16) - 412: 14(int) SNegate 411 - 413: 52(ivec2) CompositeConstruct 412 412 - 416: 52(ivec2) Select 415 413 410 - Store 345(i16v) 416 - 417: 37(ptr) AccessChain 358(u16v) 284 + 406: 14(int) Select 405 404 402 + Store 346(i16) 406 + 407: 14(int) Load 346(i16) + 408: 52(ivec2) CompositeConstruct 407 407 + 409: 14(int) Load 346(i16) + 410: 14(int) SNegate 409 + 411: 52(ivec2) CompositeConstruct 410 410 + 414: 52(ivec2) Select 413 411 408 + Store 343(i16v) 414 + 415: 37(ptr) AccessChain 356(u16v) 282 + 416: 36(int) Load 415 + 417: 37(ptr) AccessChain 356(u16v) 264 418: 36(int) Load 417 - 419: 37(ptr) AccessChain 358(u16v) 264 - 420: 36(int) Load 419 - 421: 36(int) Select 407 420 418 - Store 360(u16) 421 - 422: 36(int) Load 360(u16) - 423: 193(ivec3) CompositeConstruct 422 422 422 - 424: 36(int) Load 360(u16) - 425: 36(int) SNegate 424 - 426: 193(ivec3) CompositeConstruct 425 425 425 - 429: 193(ivec3) Select 428 426 423 - Store 358(u16v) 429 - 431: 52(ivec2) Load 345(i16v) - 432: 27(int) Bitcast 431 - Store 430(i32) 432 - 437: 434(ivec4) Load 436(i16v4) - 438: 71(int) Bitcast 437 - Store 433(i64) 438 - 441: 57(ivec2) Load 440(u16v2) - 442: 17(int) Bitcast 441 - Store 439(u32) 442 - 448: 445(ivec4) Load 447(u16v4) - 449: 77(int) Bitcast 448 - Store 444(u64) 449 - 450: 27(int) Load 430(i32) - 451: 52(ivec2) Bitcast 450 - Store 345(i16v) 451 - 452: 71(int) Load 433(i64) - 453: 434(ivec4) Bitcast 452 - Store 436(i16v4) 453 - 454: 17(int) Load 439(u32) - 455: 57(ivec2) Bitcast 454 - Store 440(u16v2) 455 - 456: 77(int) Load 444(u64) - 457: 445(ivec4) Bitcast 456 - Store 447(u16v4) 457 - 460: 193(ivec3) Load 358(u16v) - 461: 36(int) Load 360(u16) - 462: 193(ivec3) CompositeConstruct 461 461 461 - 463: 427(bvec3) ULessThan 460 462 - Store 459(bv) 463 - 464: 52(ivec2) Load 345(i16v) - 465: 14(int) Load 348(i16) - 466: 52(ivec2) CompositeConstruct 465 465 - 467: 174(bvec2) SLessThan 464 466 - 468: 427(bvec3) Load 459(bv) - 469: 427(bvec3) VectorShuffle 468 467 3 4 2 - Store 459(bv) 469 - 470: 193(ivec3) Load 358(u16v) - 471: 36(int) Load 360(u16) - 472: 193(ivec3) CompositeConstruct 471 471 471 - 473: 427(bvec3) ULessThanEqual 470 472 - Store 459(bv) 473 - 474: 52(ivec2) Load 345(i16v) - 475: 14(int) Load 348(i16) - 476: 52(ivec2) CompositeConstruct 475 475 - 477: 174(bvec2) SLessThanEqual 474 476 - 478: 427(bvec3) Load 459(bv) - 479: 427(bvec3) VectorShuffle 478 477 3 4 2 - Store 459(bv) 479 - 480: 193(ivec3) Load 358(u16v) - 481: 36(int) Load 360(u16) - 482: 193(ivec3) CompositeConstruct 481 481 481 - 483: 427(bvec3) UGreaterThan 480 482 - Store 459(bv) 483 - 484: 52(ivec2) Load 345(i16v) - 485: 14(int) Load 348(i16) - 486: 52(ivec2) CompositeConstruct 485 485 - 487: 174(bvec2) SGreaterThan 484 486 - 488: 427(bvec3) Load 459(bv) - 489: 427(bvec3) VectorShuffle 488 487 3 4 2 - Store 459(bv) 489 - 490: 193(ivec3) Load 358(u16v) - 491: 36(int) Load 360(u16) - 492: 193(ivec3) CompositeConstruct 491 491 491 - 493: 427(bvec3) UGreaterThanEqual 490 492 - Store 459(bv) 493 - 494: 52(ivec2) Load 345(i16v) - 495: 14(int) Load 348(i16) - 496: 52(ivec2) CompositeConstruct 495 495 - 497: 174(bvec2) SGreaterThanEqual 494 496 - 498: 427(bvec3) Load 459(bv) - 499: 427(bvec3) VectorShuffle 498 497 3 4 2 - Store 459(bv) 499 - 500: 193(ivec3) Load 358(u16v) - 501: 36(int) Load 360(u16) - 502: 193(ivec3) CompositeConstruct 501 501 501 - 503: 427(bvec3) IEqual 500 502 - Store 459(bv) 503 - 504: 52(ivec2) Load 345(i16v) - 505: 14(int) Load 348(i16) - 506: 52(ivec2) CompositeConstruct 505 505 - 507: 174(bvec2) IEqual 504 506 - 508: 427(bvec3) Load 459(bv) - 509: 427(bvec3) VectorShuffle 508 507 3 4 2 - Store 459(bv) 509 - 510: 193(ivec3) Load 358(u16v) - 511: 36(int) Load 360(u16) - 512: 193(ivec3) CompositeConstruct 511 511 511 - 513: 427(bvec3) INotEqual 510 512 - Store 459(bv) 513 - 514: 52(ivec2) Load 345(i16v) - 515: 14(int) Load 348(i16) - 516: 52(ivec2) CompositeConstruct 515 515 - 517: 174(bvec2) INotEqual 514 516 - 518: 427(bvec3) Load 459(bv) - 519: 427(bvec3) VectorShuffle 518 517 3 4 2 - Store 459(bv) 519 + 419: 36(int) Select 405 418 416 + Store 358(u16) 419 + 420: 36(int) Load 358(u16) + 421: 193(ivec3) CompositeConstruct 420 420 420 + 422: 36(int) Load 358(u16) + 423: 36(int) SNegate 422 + 424: 193(ivec3) CompositeConstruct 423 423 423 + 427: 193(ivec3) Select 426 424 421 + Store 356(u16v) 427 + 429: 52(ivec2) Load 343(i16v) + 430: 27(int) Bitcast 429 + Store 428(i32) 430 + 435: 432(ivec4) Load 434(i16v4) + 436: 71(int) Bitcast 435 + Store 431(i64) 436 + 439: 57(ivec2) Load 438(u16v2) + 440: 17(int) Bitcast 439 + Store 437(u32) 440 + 446: 443(ivec4) Load 445(u16v4) + 447: 77(int) Bitcast 446 + Store 442(u64) 447 + 448: 27(int) Load 428(i32) + 449: 52(ivec2) Bitcast 448 + Store 343(i16v) 449 + 450: 71(int) Load 431(i64) + 451: 432(ivec4) Bitcast 450 + Store 434(i16v4) 451 + 452: 17(int) Load 437(u32) + 453: 57(ivec2) Bitcast 452 + Store 438(u16v2) 453 + 454: 77(int) Load 442(u64) + 455: 443(ivec4) Bitcast 454 + Store 445(u16v4) 455 + 458: 193(ivec3) Load 356(u16v) + 459: 36(int) Load 358(u16) + 460: 193(ivec3) CompositeConstruct 459 459 459 + 461: 425(bvec3) ULessThan 458 460 + Store 457(bv) 461 + 462: 52(ivec2) Load 343(i16v) + 463: 14(int) Load 346(i16) + 464: 52(ivec2) CompositeConstruct 463 463 + 465: 174(bvec2) SLessThan 462 464 + 466: 425(bvec3) Load 457(bv) + 467: 425(bvec3) VectorShuffle 466 465 3 4 2 + Store 457(bv) 467 + 468: 193(ivec3) Load 356(u16v) + 469: 36(int) Load 358(u16) + 470: 193(ivec3) CompositeConstruct 469 469 469 + 471: 425(bvec3) ULessThanEqual 468 470 + Store 457(bv) 471 + 472: 52(ivec2) Load 343(i16v) + 473: 14(int) Load 346(i16) + 474: 52(ivec2) CompositeConstruct 473 473 + 475: 174(bvec2) SLessThanEqual 472 474 + 476: 425(bvec3) Load 457(bv) + 477: 425(bvec3) VectorShuffle 476 475 3 4 2 + Store 457(bv) 477 + 478: 193(ivec3) Load 356(u16v) + 479: 36(int) Load 358(u16) + 480: 193(ivec3) CompositeConstruct 479 479 479 + 481: 425(bvec3) UGreaterThan 478 480 + Store 457(bv) 481 + 482: 52(ivec2) Load 343(i16v) + 483: 14(int) Load 346(i16) + 484: 52(ivec2) CompositeConstruct 483 483 + 485: 174(bvec2) SGreaterThan 482 484 + 486: 425(bvec3) Load 457(bv) + 487: 425(bvec3) VectorShuffle 486 485 3 4 2 + Store 457(bv) 487 + 488: 193(ivec3) Load 356(u16v) + 489: 36(int) Load 358(u16) + 490: 193(ivec3) CompositeConstruct 489 489 489 + 491: 425(bvec3) UGreaterThanEqual 488 490 + Store 457(bv) 491 + 492: 52(ivec2) Load 343(i16v) + 493: 14(int) Load 346(i16) + 494: 52(ivec2) CompositeConstruct 493 493 + 495: 174(bvec2) SGreaterThanEqual 492 494 + 496: 425(bvec3) Load 457(bv) + 497: 425(bvec3) VectorShuffle 496 495 3 4 2 + Store 457(bv) 497 + 498: 193(ivec3) Load 356(u16v) + 499: 36(int) Load 358(u16) + 500: 193(ivec3) CompositeConstruct 499 499 499 + 501: 425(bvec3) IEqual 498 500 + Store 457(bv) 501 + 502: 52(ivec2) Load 343(i16v) + 503: 14(int) Load 346(i16) + 504: 52(ivec2) CompositeConstruct 503 503 + 505: 174(bvec2) IEqual 502 504 + 506: 425(bvec3) Load 457(bv) + 507: 425(bvec3) VectorShuffle 506 505 3 4 2 + Store 457(bv) 507 + 508: 193(ivec3) Load 356(u16v) + 509: 36(int) Load 358(u16) + 510: 193(ivec3) CompositeConstruct 509 509 509 + 511: 425(bvec3) INotEqual 508 510 + Store 457(bv) 511 + 512: 52(ivec2) Load 343(i16v) + 513: 14(int) Load 346(i16) + 514: 52(ivec2) CompositeConstruct 513 513 + 515: 174(bvec2) INotEqual 512 514 + 516: 425(bvec3) Load 457(bv) + 517: 425(bvec3) VectorShuffle 516 515 3 4 2 + Store 457(bv) 517 Return FunctionEnd diff --git a/Test/baseResults/spv.int32.frag.out b/Test/baseResults/spv.int32.frag.out index a6d07d03..c615672f 100644 --- a/Test/baseResults/spv.int32.frag.out +++ b/Test/baseResults/spv.int32.frag.out @@ -1,7 +1,7 @@ spv.int32.frag // Module Version 10300 // Generated by (magic number): 80006 -// Id's are bound by 495 +// Id's are bound by 493 Capability Shader Capability Float16 @@ -52,54 +52,54 @@ spv.int32.frag Name 210 "i" Name 214 "uv" Name 227 "i64" - Name 262 "b" - Name 314 "i32v" - Name 317 "i32" - Name 327 "u32v" - Name 329 "u32" - Name 401 "i8v4" - Name 404 "i16v2" - Name 409 "u8v4" - Name 412 "u16v2" - Name 415 "i64" - Name 418 "u32v2" - Name 420 "u64" - Name 424 "bv" - Name 487 "Block" - MemberName 487(Block) 0 "i32" - MemberName 487(Block) 1 "i32v2" - MemberName 487(Block) 2 "i32v3" - MemberName 487(Block) 3 "i32v4" - MemberName 487(Block) 4 "u32" - MemberName 487(Block) 5 "u32v2" - MemberName 487(Block) 6 "u32v3" - MemberName 487(Block) 7 "u32v4" - Name 489 "block" - Name 490 "si32" - Name 491 "su32" - Name 492 "si" - Name 493 "su" - Name 494 "sb" + Name 260 "b" + Name 312 "i32v" + Name 315 "i32" + Name 325 "u32v" + Name 327 "u32" + Name 399 "i8v4" + Name 402 "i16v2" + Name 407 "u8v4" + Name 410 "u16v2" + Name 413 "i64" + Name 416 "u32v2" + Name 418 "u64" + Name 422 "bv" + Name 485 "Block" + MemberName 485(Block) 0 "i32" + MemberName 485(Block) 1 "i32v2" + MemberName 485(Block) 2 "i32v3" + MemberName 485(Block) 3 "i32v4" + MemberName 485(Block) 4 "u32" + MemberName 485(Block) 5 "u32v2" + MemberName 485(Block) 6 "u32v3" + MemberName 485(Block) 7 "u32v4" + Name 487 "block" + Name 488 "si32" + Name 489 "su32" + Name 490 "si" + Name 491 "su" + Name 492 "sb" MemberDecorate 27(Uniforms) 0 Offset 0 Decorate 27(Uniforms) Block Decorate 29 DescriptorSet 0 Decorate 29 Binding 0 - MemberDecorate 487(Block) 0 Offset 0 - MemberDecorate 487(Block) 1 Offset 8 - MemberDecorate 487(Block) 2 Offset 16 - MemberDecorate 487(Block) 3 Offset 32 - MemberDecorate 487(Block) 4 Offset 48 - MemberDecorate 487(Block) 5 Offset 56 - MemberDecorate 487(Block) 6 Offset 64 - MemberDecorate 487(Block) 7 Offset 80 - Decorate 487(Block) Block - Decorate 489(block) DescriptorSet 0 - Decorate 489(block) Binding 1 - Decorate 490(si32) SpecId 100 - Decorate 491(su32) SpecId 101 - Decorate 492(si) SpecId 102 - Decorate 493(su) SpecId 103 - Decorate 494(sb) SpecId 104 + MemberDecorate 485(Block) 0 Offset 0 + MemberDecorate 485(Block) 1 Offset 8 + MemberDecorate 485(Block) 2 Offset 16 + MemberDecorate 485(Block) 3 Offset 32 + MemberDecorate 485(Block) 4 Offset 48 + MemberDecorate 485(Block) 5 Offset 56 + MemberDecorate 485(Block) 6 Offset 64 + MemberDecorate 485(Block) 7 Offset 80 + Decorate 485(Block) Block + Decorate 487(block) DescriptorSet 0 + Decorate 487(block) Binding 1 + Decorate 488(si32) SpecId 100 + Decorate 489(su32) SpecId 101 + Decorate 490(si) SpecId 102 + Decorate 491(su) SpecId 103 + Decorate 492(sb) SpecId 104 2: TypeVoid 3: TypeFunction 2 14: TypeInt 32 0 @@ -171,30 +171,30 @@ spv.int32.frag 188: TypeVector 18(int) 3 226: TypePointer Function 57(int) 251: 14(int) Constant 2 - 261: TypePointer Function 165(bool) - 325: 52(ivec2) ConstantComposite 24 24 - 334: 184(ivec3) ConstantComposite 175 175 175 - 376: 165(bool) ConstantTrue - 383: 165(bool) ConstantFalse - 384: 166(bvec2) ConstantComposite 383 383 - 396: TypeVector 165(bool) 3 - 397: 396(bvec3) ConstantComposite 383 383 383 - 399: TypeVector 91(int) 4 - 400: TypePointer Function 399(ivec4) - 407: TypeVector 120(int) 4 - 408: TypePointer Function 407(ivec4) - 419: TypePointer Function 63(int) - 423: TypePointer Function 396(bvec3) - 485: TypeVector 18(int) 4 - 486: TypeVector 14(int) 4 - 487(Block): TypeStruct 18(int) 52(ivec2) 188(ivec3) 485(ivec4) 14(int) 49(ivec2) 184(ivec3) 486(ivec4) - 488: TypePointer Uniform 487(Block) - 489(block): 488(ptr) Variable Uniform - 490(si32): 18(int) SpecConstant 4294967286 - 491(su32): 14(int) SpecConstant 20 - 492(si): 18(int) SpecConstant 4294967291 - 493(su): 14(int) SpecConstant 4 - 494(sb): 165(bool) SpecConstantTrue + 259: TypePointer Function 165(bool) + 323: 52(ivec2) ConstantComposite 24 24 + 332: 184(ivec3) ConstantComposite 175 175 175 + 374: 165(bool) ConstantTrue + 381: 165(bool) ConstantFalse + 382: 166(bvec2) ConstantComposite 381 381 + 394: TypeVector 165(bool) 3 + 395: 394(bvec3) ConstantComposite 381 381 381 + 397: TypeVector 91(int) 4 + 398: TypePointer Function 397(ivec4) + 405: TypeVector 120(int) 4 + 406: TypePointer Function 405(ivec4) + 417: TypePointer Function 63(int) + 421: TypePointer Function 394(bvec3) + 483: TypeVector 18(int) 4 + 484: TypeVector 14(int) 4 + 485(Block): TypeStruct 18(int) 52(ivec2) 188(ivec3) 483(ivec4) 14(int) 49(ivec2) 184(ivec3) 484(ivec4) + 486: TypePointer Uniform 485(Block) + 487(block): 486(ptr) Variable Uniform + 488(si32): 18(int) SpecConstant 4294967286 + 489(su32): 14(int) SpecConstant 20 + 490(si): 18(int) SpecConstant 4294967291 + 491(su): 14(int) SpecConstant 4 + 492(sb): 165(bool) SpecConstantTrue 4(main): 2 Function None 3 5: Label Store 16(u32Max) 17 @@ -360,7 +360,7 @@ spv.int32.frag 210(i): 19(ptr) Variable Function 214(uv): 185(ptr) Variable Function 227(i64): 226(ptr) Variable Function - 262(b): 261(ptr) Variable Function + 260(b): 259(ptr) Variable Function 187: 184(ivec3) Load 186(u32v) 189: 188(ivec3) CompositeConstruct 170 170 170 190: 184(ivec3) IAdd 187 189 @@ -440,275 +440,273 @@ spv.int32.frag 250: 57(int) Load 227(i64) 252: 38(ptr) AccessChain 186(u32v) 251 253: 14(int) Load 252 - 254: 57(int) UConvert 253 - 255: 57(int) Bitcast 254 - 256: 57(int) ShiftLeftLogical 250 255 - Store 227(i64) 256 - 257: 184(ivec3) Load 186(u32v) - 258: 18(int) Load 210(i) - 259: 188(ivec3) CompositeConstruct 258 258 258 - 260: 184(ivec3) ShiftLeftLogical 257 259 - Store 214(uv) 260 - 263: 38(ptr) AccessChain 186(u32v) 175 - 264: 14(int) Load 263 - 265: 18(int) Load 191(i32) - 266: 14(int) Bitcast 265 - 267: 165(bool) INotEqual 264 266 - Store 262(b) 267 - 268: 18(int) Load 191(i32) - 269: 14(int) Bitcast 268 - 270: 38(ptr) AccessChain 186(u32v) 175 - 271: 14(int) Load 270 - 272: 165(bool) IEqual 269 271 - Store 262(b) 272 - 273: 38(ptr) AccessChain 186(u32v) 175 + 254: 57(int) ShiftLeftLogical 250 253 + Store 227(i64) 254 + 255: 184(ivec3) Load 186(u32v) + 256: 18(int) Load 210(i) + 257: 188(ivec3) CompositeConstruct 256 256 256 + 258: 184(ivec3) ShiftLeftLogical 255 257 + Store 214(uv) 258 + 261: 38(ptr) AccessChain 186(u32v) 175 + 262: 14(int) Load 261 + 263: 18(int) Load 191(i32) + 264: 14(int) Bitcast 263 + 265: 165(bool) INotEqual 262 264 + Store 260(b) 265 + 266: 18(int) Load 191(i32) + 267: 14(int) Bitcast 266 + 268: 38(ptr) AccessChain 186(u32v) 175 + 269: 14(int) Load 268 + 270: 165(bool) IEqual 267 269 + Store 260(b) 270 + 271: 38(ptr) AccessChain 186(u32v) 175 + 272: 14(int) Load 271 + 273: 38(ptr) AccessChain 214(uv) 176 274: 14(int) Load 273 - 275: 38(ptr) AccessChain 214(uv) 176 - 276: 14(int) Load 275 - 277: 165(bool) UGreaterThan 274 276 - Store 262(b) 277 - 278: 18(int) Load 191(i32) - 279: 18(int) Load 210(i) - 280: 165(bool) SLessThan 278 279 - Store 262(b) 280 - 281: 38(ptr) AccessChain 186(u32v) 176 + 275: 165(bool) UGreaterThan 272 274 + Store 260(b) 275 + 276: 18(int) Load 191(i32) + 277: 18(int) Load 210(i) + 278: 165(bool) SLessThan 276 277 + Store 260(b) 278 + 279: 38(ptr) AccessChain 186(u32v) 176 + 280: 14(int) Load 279 + 281: 38(ptr) AccessChain 214(uv) 175 282: 14(int) Load 281 - 283: 38(ptr) AccessChain 214(uv) 175 - 284: 14(int) Load 283 - 285: 165(bool) UGreaterThanEqual 282 284 - Store 262(b) 285 - 286: 18(int) Load 191(i32) - 287: 18(int) Load 210(i) - 288: 165(bool) SLessThanEqual 286 287 - Store 262(b) 288 - 289: 18(int) Load 191(i32) - 290: 14(int) Bitcast 289 - 291: 184(ivec3) Load 214(uv) - 292: 184(ivec3) CompositeConstruct 290 290 290 - 293: 184(ivec3) BitwiseOr 291 292 - Store 214(uv) 293 - 294: 18(int) Load 191(i32) - 295: 18(int) Load 210(i) - 296: 18(int) BitwiseOr 294 295 - Store 210(i) 296 - 297: 18(int) Load 191(i32) - 298: 57(int) SConvert 297 - 299: 57(int) Load 227(i64) - 300: 57(int) BitwiseAnd 299 298 - Store 227(i64) 300 - 301: 184(ivec3) Load 186(u32v) - 302: 184(ivec3) Load 214(uv) - 303: 184(ivec3) BitwiseAnd 301 302 - Store 214(uv) 303 - 304: 18(int) Load 191(i32) - 305: 14(int) Bitcast 304 - 306: 184(ivec3) Load 214(uv) - 307: 184(ivec3) CompositeConstruct 305 305 305 - 308: 184(ivec3) BitwiseXor 306 307 - Store 214(uv) 308 - 309: 184(ivec3) Load 186(u32v) - 310: 18(int) Load 191(i32) - 311: 14(int) Bitcast 310 - 312: 184(ivec3) CompositeConstruct 311 311 311 - 313: 184(ivec3) BitwiseXor 309 312 - Store 186(u32v) 313 + 283: 165(bool) UGreaterThanEqual 280 282 + Store 260(b) 283 + 284: 18(int) Load 191(i32) + 285: 18(int) Load 210(i) + 286: 165(bool) SLessThanEqual 284 285 + Store 260(b) 286 + 287: 18(int) Load 191(i32) + 288: 14(int) Bitcast 287 + 289: 184(ivec3) Load 214(uv) + 290: 184(ivec3) CompositeConstruct 288 288 288 + 291: 184(ivec3) BitwiseOr 289 290 + Store 214(uv) 291 + 292: 18(int) Load 191(i32) + 293: 18(int) Load 210(i) + 294: 18(int) BitwiseOr 292 293 + Store 210(i) 294 + 295: 18(int) Load 191(i32) + 296: 57(int) SConvert 295 + 297: 57(int) Load 227(i64) + 298: 57(int) BitwiseAnd 297 296 + Store 227(i64) 298 + 299: 184(ivec3) Load 186(u32v) + 300: 184(ivec3) Load 214(uv) + 301: 184(ivec3) BitwiseAnd 299 300 + Store 214(uv) 301 + 302: 18(int) Load 191(i32) + 303: 14(int) Bitcast 302 + 304: 184(ivec3) Load 214(uv) + 305: 184(ivec3) CompositeConstruct 303 303 303 + 306: 184(ivec3) BitwiseXor 304 305 + Store 214(uv) 306 + 307: 184(ivec3) Load 186(u32v) + 308: 18(int) Load 191(i32) + 309: 14(int) Bitcast 308 + 310: 184(ivec3) CompositeConstruct 309 309 309 + 311: 184(ivec3) BitwiseXor 307 310 + Store 186(u32v) 311 Return FunctionEnd 12(builtinFuncs(): 2 Function None 3 13: Label - 314(i32v): 53(ptr) Variable Function - 317(i32): 19(ptr) Variable Function - 327(u32v): 185(ptr) Variable Function - 329(u32): 38(ptr) Variable Function - 401(i8v4): 400(ptr) Variable Function - 404(i16v2): 102(ptr) Variable Function - 409(u8v4): 408(ptr) Variable Function - 412(u16v2): 131(ptr) Variable Function - 415(i64): 226(ptr) Variable Function - 418(u32v2): 50(ptr) Variable Function - 420(u64): 419(ptr) Variable Function - 424(bv): 423(ptr) Variable Function - 315: 52(ivec2) Load 314(i32v) - 316: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 315 - Store 314(i32v) 316 - 318: 18(int) Load 317(i32) - 319: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 318 - Store 317(i32) 319 - 320: 52(ivec2) Load 314(i32v) - 321: 18(int) Load 317(i32) - 322: 52(ivec2) CompositeConstruct 321 321 - 323: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 320 322 - Store 314(i32v) 323 - 324: 52(ivec2) Load 314(i32v) - 326: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 324 325 - Store 314(i32v) 326 - 328: 184(ivec3) Load 327(u32v) - 330: 14(int) Load 329(u32) - 331: 184(ivec3) CompositeConstruct 330 330 330 - 332: 184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 328 331 - Store 327(u32v) 332 - 333: 184(ivec3) Load 327(u32v) - 335: 184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 333 334 - Store 327(u32v) 335 - 336: 52(ivec2) Load 314(i32v) - 337: 18(int) Load 317(i32) - 338: 52(ivec2) CompositeConstruct 337 337 - 339: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 336 338 - Store 314(i32v) 339 - 340: 52(ivec2) Load 314(i32v) - 341: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 340 325 - Store 314(i32v) 341 - 342: 184(ivec3) Load 327(u32v) - 343: 14(int) Load 329(u32) - 344: 184(ivec3) CompositeConstruct 343 343 343 - 345: 184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 342 344 - Store 327(u32v) 345 - 346: 184(ivec3) Load 327(u32v) - 347: 184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 346 334 - Store 327(u32v) 347 - 348: 52(ivec2) Load 314(i32v) - 349: 18(int) Load 317(i32) - 350: 18(int) SNegate 349 - 351: 18(int) Load 317(i32) - 352: 52(ivec2) CompositeConstruct 350 350 - 353: 52(ivec2) CompositeConstruct 351 351 - 354: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 348 352 353 - Store 314(i32v) 354 - 355: 52(ivec2) Load 314(i32v) - 356: 52(ivec2) Load 314(i32v) - 357: 52(ivec2) SNegate 356 - 358: 52(ivec2) Load 314(i32v) - 359: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 355 357 358 - Store 314(i32v) 359 - 360: 184(ivec3) Load 327(u32v) - 361: 14(int) Load 329(u32) - 362: 14(int) SNegate 361 - 363: 14(int) Load 329(u32) - 364: 184(ivec3) CompositeConstruct 362 362 362 - 365: 184(ivec3) CompositeConstruct 363 363 363 - 366: 184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 360 364 365 - Store 327(u32v) 366 - 367: 184(ivec3) Load 327(u32v) - 368: 184(ivec3) Load 327(u32v) - 369: 184(ivec3) SNegate 368 - 370: 184(ivec3) Load 327(u32v) - 371: 184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 367 369 370 - Store 327(u32v) 371 - 372: 19(ptr) AccessChain 314(i32v) 175 + 312(i32v): 53(ptr) Variable Function + 315(i32): 19(ptr) Variable Function + 325(u32v): 185(ptr) Variable Function + 327(u32): 38(ptr) Variable Function + 399(i8v4): 398(ptr) Variable Function + 402(i16v2): 102(ptr) Variable Function + 407(u8v4): 406(ptr) Variable Function + 410(u16v2): 131(ptr) Variable Function + 413(i64): 226(ptr) Variable Function + 416(u32v2): 50(ptr) Variable Function + 418(u64): 417(ptr) Variable Function + 422(bv): 421(ptr) Variable Function + 313: 52(ivec2) Load 312(i32v) + 314: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 313 + Store 312(i32v) 314 + 316: 18(int) Load 315(i32) + 317: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 316 + Store 315(i32) 317 + 318: 52(ivec2) Load 312(i32v) + 319: 18(int) Load 315(i32) + 320: 52(ivec2) CompositeConstruct 319 319 + 321: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 318 320 + Store 312(i32v) 321 + 322: 52(ivec2) Load 312(i32v) + 324: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 322 323 + Store 312(i32v) 324 + 326: 184(ivec3) Load 325(u32v) + 328: 14(int) Load 327(u32) + 329: 184(ivec3) CompositeConstruct 328 328 328 + 330: 184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 326 329 + Store 325(u32v) 330 + 331: 184(ivec3) Load 325(u32v) + 333: 184(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 331 332 + Store 325(u32v) 333 + 334: 52(ivec2) Load 312(i32v) + 335: 18(int) Load 315(i32) + 336: 52(ivec2) CompositeConstruct 335 335 + 337: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 334 336 + Store 312(i32v) 337 + 338: 52(ivec2) Load 312(i32v) + 339: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 338 323 + Store 312(i32v) 339 + 340: 184(ivec3) Load 325(u32v) + 341: 14(int) Load 327(u32) + 342: 184(ivec3) CompositeConstruct 341 341 341 + 343: 184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 340 342 + Store 325(u32v) 343 + 344: 184(ivec3) Load 325(u32v) + 345: 184(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 344 332 + Store 325(u32v) 345 + 346: 52(ivec2) Load 312(i32v) + 347: 18(int) Load 315(i32) + 348: 18(int) SNegate 347 + 349: 18(int) Load 315(i32) + 350: 52(ivec2) CompositeConstruct 348 348 + 351: 52(ivec2) CompositeConstruct 349 349 + 352: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 346 350 351 + Store 312(i32v) 352 + 353: 52(ivec2) Load 312(i32v) + 354: 52(ivec2) Load 312(i32v) + 355: 52(ivec2) SNegate 354 + 356: 52(ivec2) Load 312(i32v) + 357: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 353 355 356 + Store 312(i32v) 357 + 358: 184(ivec3) Load 325(u32v) + 359: 14(int) Load 327(u32) + 360: 14(int) SNegate 359 + 361: 14(int) Load 327(u32) + 362: 184(ivec3) CompositeConstruct 360 360 360 + 363: 184(ivec3) CompositeConstruct 361 361 361 + 364: 184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 358 362 363 + Store 325(u32v) 364 + 365: 184(ivec3) Load 325(u32v) + 366: 184(ivec3) Load 325(u32v) + 367: 184(ivec3) SNegate 366 + 368: 184(ivec3) Load 325(u32v) + 369: 184(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 365 367 368 + Store 325(u32v) 369 + 370: 19(ptr) AccessChain 312(i32v) 175 + 371: 18(int) Load 370 + 372: 19(ptr) AccessChain 312(i32v) 176 373: 18(int) Load 372 - 374: 19(ptr) AccessChain 314(i32v) 176 - 375: 18(int) Load 374 - 377: 18(int) Select 376 375 373 - Store 317(i32) 377 - 378: 18(int) Load 317(i32) - 379: 52(ivec2) CompositeConstruct 378 378 - 380: 18(int) Load 317(i32) - 381: 18(int) SNegate 380 - 382: 52(ivec2) CompositeConstruct 381 381 - 385: 52(ivec2) Select 384 382 379 - Store 314(i32v) 385 - 386: 38(ptr) AccessChain 327(u32v) 175 + 375: 18(int) Select 374 373 371 + Store 315(i32) 375 + 376: 18(int) Load 315(i32) + 377: 52(ivec2) CompositeConstruct 376 376 + 378: 18(int) Load 315(i32) + 379: 18(int) SNegate 378 + 380: 52(ivec2) CompositeConstruct 379 379 + 383: 52(ivec2) Select 382 380 377 + Store 312(i32v) 383 + 384: 38(ptr) AccessChain 325(u32v) 175 + 385: 14(int) Load 384 + 386: 38(ptr) AccessChain 325(u32v) 176 387: 14(int) Load 386 - 388: 38(ptr) AccessChain 327(u32v) 176 - 389: 14(int) Load 388 - 390: 14(int) Select 376 389 387 - Store 329(u32) 390 - 391: 14(int) Load 329(u32) - 392: 184(ivec3) CompositeConstruct 391 391 391 - 393: 14(int) Load 329(u32) - 394: 14(int) SNegate 393 - 395: 184(ivec3) CompositeConstruct 394 394 394 - 398: 184(ivec3) Select 397 395 392 - Store 327(u32v) 398 - 402: 399(ivec4) Load 401(i8v4) - 403: 18(int) Bitcast 402 - Store 317(i32) 403 - 405: 101(ivec2) Load 404(i16v2) - 406: 18(int) Bitcast 405 - Store 317(i32) 406 - 410: 407(ivec4) Load 409(u8v4) - 411: 14(int) Bitcast 410 - Store 329(u32) 411 - 413: 130(ivec2) Load 412(u16v2) - 414: 14(int) Bitcast 413 - Store 329(u32) 414 - 416: 57(int) Load 415(i64) - 417: 52(ivec2) Bitcast 416 - Store 314(i32v) 417 - 421: 63(int) Load 420(u64) - 422: 49(ivec2) Bitcast 421 - Store 418(u32v2) 422 - 425: 184(ivec3) Load 327(u32v) - 426: 14(int) Load 329(u32) - 427: 184(ivec3) CompositeConstruct 426 426 426 - 428: 396(bvec3) ULessThan 425 427 - Store 424(bv) 428 - 429: 52(ivec2) Load 314(i32v) - 430: 18(int) Load 317(i32) - 431: 52(ivec2) CompositeConstruct 430 430 - 432: 166(bvec2) SLessThan 429 431 - 433: 396(bvec3) Load 424(bv) - 434: 396(bvec3) VectorShuffle 433 432 3 4 2 - Store 424(bv) 434 - 435: 184(ivec3) Load 327(u32v) - 436: 14(int) Load 329(u32) - 437: 184(ivec3) CompositeConstruct 436 436 436 - 438: 396(bvec3) ULessThanEqual 435 437 - Store 424(bv) 438 - 439: 52(ivec2) Load 314(i32v) - 440: 18(int) Load 317(i32) - 441: 52(ivec2) CompositeConstruct 440 440 - 442: 166(bvec2) SLessThanEqual 439 441 - 443: 396(bvec3) Load 424(bv) - 444: 396(bvec3) VectorShuffle 443 442 3 4 2 - Store 424(bv) 444 - 445: 184(ivec3) Load 327(u32v) - 446: 14(int) Load 329(u32) - 447: 184(ivec3) CompositeConstruct 446 446 446 - 448: 396(bvec3) UGreaterThan 445 447 - Store 424(bv) 448 - 449: 52(ivec2) Load 314(i32v) - 450: 18(int) Load 317(i32) - 451: 52(ivec2) CompositeConstruct 450 450 - 452: 166(bvec2) SGreaterThan 449 451 - 453: 396(bvec3) Load 424(bv) - 454: 396(bvec3) VectorShuffle 453 452 3 4 2 - Store 424(bv) 454 - 455: 184(ivec3) Load 327(u32v) - 456: 14(int) Load 329(u32) - 457: 184(ivec3) CompositeConstruct 456 456 456 - 458: 396(bvec3) UGreaterThanEqual 455 457 - Store 424(bv) 458 - 459: 52(ivec2) Load 314(i32v) - 460: 18(int) Load 317(i32) - 461: 52(ivec2) CompositeConstruct 460 460 - 462: 166(bvec2) SGreaterThanEqual 459 461 - 463: 396(bvec3) Load 424(bv) - 464: 396(bvec3) VectorShuffle 463 462 3 4 2 - Store 424(bv) 464 - 465: 184(ivec3) Load 327(u32v) - 466: 14(int) Load 329(u32) - 467: 184(ivec3) CompositeConstruct 466 466 466 - 468: 396(bvec3) IEqual 465 467 - Store 424(bv) 468 - 469: 52(ivec2) Load 314(i32v) - 470: 18(int) Load 317(i32) - 471: 52(ivec2) CompositeConstruct 470 470 - 472: 166(bvec2) IEqual 469 471 - 473: 396(bvec3) Load 424(bv) - 474: 396(bvec3) VectorShuffle 473 472 3 4 2 - Store 424(bv) 474 - 475: 184(ivec3) Load 327(u32v) - 476: 14(int) Load 329(u32) - 477: 184(ivec3) CompositeConstruct 476 476 476 - 478: 396(bvec3) INotEqual 475 477 - Store 424(bv) 478 - 479: 52(ivec2) Load 314(i32v) - 480: 18(int) Load 317(i32) - 481: 52(ivec2) CompositeConstruct 480 480 - 482: 166(bvec2) INotEqual 479 481 - 483: 396(bvec3) Load 424(bv) - 484: 396(bvec3) VectorShuffle 483 482 3 4 2 - Store 424(bv) 484 + 388: 14(int) Select 374 387 385 + Store 327(u32) 388 + 389: 14(int) Load 327(u32) + 390: 184(ivec3) CompositeConstruct 389 389 389 + 391: 14(int) Load 327(u32) + 392: 14(int) SNegate 391 + 393: 184(ivec3) CompositeConstruct 392 392 392 + 396: 184(ivec3) Select 395 393 390 + Store 325(u32v) 396 + 400: 397(ivec4) Load 399(i8v4) + 401: 18(int) Bitcast 400 + Store 315(i32) 401 + 403: 101(ivec2) Load 402(i16v2) + 404: 18(int) Bitcast 403 + Store 315(i32) 404 + 408: 405(ivec4) Load 407(u8v4) + 409: 14(int) Bitcast 408 + Store 327(u32) 409 + 411: 130(ivec2) Load 410(u16v2) + 412: 14(int) Bitcast 411 + Store 327(u32) 412 + 414: 57(int) Load 413(i64) + 415: 52(ivec2) Bitcast 414 + Store 312(i32v) 415 + 419: 63(int) Load 418(u64) + 420: 49(ivec2) Bitcast 419 + Store 416(u32v2) 420 + 423: 184(ivec3) Load 325(u32v) + 424: 14(int) Load 327(u32) + 425: 184(ivec3) CompositeConstruct 424 424 424 + 426: 394(bvec3) ULessThan 423 425 + Store 422(bv) 426 + 427: 52(ivec2) Load 312(i32v) + 428: 18(int) Load 315(i32) + 429: 52(ivec2) CompositeConstruct 428 428 + 430: 166(bvec2) SLessThan 427 429 + 431: 394(bvec3) Load 422(bv) + 432: 394(bvec3) VectorShuffle 431 430 3 4 2 + Store 422(bv) 432 + 433: 184(ivec3) Load 325(u32v) + 434: 14(int) Load 327(u32) + 435: 184(ivec3) CompositeConstruct 434 434 434 + 436: 394(bvec3) ULessThanEqual 433 435 + Store 422(bv) 436 + 437: 52(ivec2) Load 312(i32v) + 438: 18(int) Load 315(i32) + 439: 52(ivec2) CompositeConstruct 438 438 + 440: 166(bvec2) SLessThanEqual 437 439 + 441: 394(bvec3) Load 422(bv) + 442: 394(bvec3) VectorShuffle 441 440 3 4 2 + Store 422(bv) 442 + 443: 184(ivec3) Load 325(u32v) + 444: 14(int) Load 327(u32) + 445: 184(ivec3) CompositeConstruct 444 444 444 + 446: 394(bvec3) UGreaterThan 443 445 + Store 422(bv) 446 + 447: 52(ivec2) Load 312(i32v) + 448: 18(int) Load 315(i32) + 449: 52(ivec2) CompositeConstruct 448 448 + 450: 166(bvec2) SGreaterThan 447 449 + 451: 394(bvec3) Load 422(bv) + 452: 394(bvec3) VectorShuffle 451 450 3 4 2 + Store 422(bv) 452 + 453: 184(ivec3) Load 325(u32v) + 454: 14(int) Load 327(u32) + 455: 184(ivec3) CompositeConstruct 454 454 454 + 456: 394(bvec3) UGreaterThanEqual 453 455 + Store 422(bv) 456 + 457: 52(ivec2) Load 312(i32v) + 458: 18(int) Load 315(i32) + 459: 52(ivec2) CompositeConstruct 458 458 + 460: 166(bvec2) SGreaterThanEqual 457 459 + 461: 394(bvec3) Load 422(bv) + 462: 394(bvec3) VectorShuffle 461 460 3 4 2 + Store 422(bv) 462 + 463: 184(ivec3) Load 325(u32v) + 464: 14(int) Load 327(u32) + 465: 184(ivec3) CompositeConstruct 464 464 464 + 466: 394(bvec3) IEqual 463 465 + Store 422(bv) 466 + 467: 52(ivec2) Load 312(i32v) + 468: 18(int) Load 315(i32) + 469: 52(ivec2) CompositeConstruct 468 468 + 470: 166(bvec2) IEqual 467 469 + 471: 394(bvec3) Load 422(bv) + 472: 394(bvec3) VectorShuffle 471 470 3 4 2 + Store 422(bv) 472 + 473: 184(ivec3) Load 325(u32v) + 474: 14(int) Load 327(u32) + 475: 184(ivec3) CompositeConstruct 474 474 474 + 476: 394(bvec3) INotEqual 473 475 + Store 422(bv) 476 + 477: 52(ivec2) Load 312(i32v) + 478: 18(int) Load 315(i32) + 479: 52(ivec2) CompositeConstruct 478 478 + 480: 166(bvec2) INotEqual 477 479 + 481: 394(bvec3) Load 422(bv) + 482: 394(bvec3) VectorShuffle 481 480 3 4 2 + Store 422(bv) 482 Return FunctionEnd diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out index ac32fb9d..598fc94f 100644 --- a/Test/baseResults/spv.int64.frag.out +++ b/Test/baseResults/spv.int64.frag.out @@ -1,7 +1,7 @@ spv.int64.frag // Module Version 10000 // Generated by (magic number): 80006 -// Id's are bound by 483 +// Id's are bound by 488 Capability Shader Capability Float64 @@ -37,38 +37,38 @@ spv.int64.frag Name 139 "i64" Name 159 "i" Name 166 "uv" - Name 221 "b" - Name 281 "i64v" - Name 284 "i64" - Name 294 "u64v" - Name 296 "u64" - Name 368 "dv" - Name 387 "iv" - Name 392 "uv" - Name 396 "bv" - Name 457 "Block" - MemberName 457(Block) 0 "i64v" - MemberName 457(Block) 1 "u64" - Name 459 "block" - Name 460 "si64" - Name 461 "su64" - Name 462 "si" - Name 463 "su" - Name 464 "sb" + Name 226 "b" + Name 286 "i64v" + Name 289 "i64" + Name 299 "u64v" + Name 301 "u64" + Name 373 "dv" + Name 392 "iv" + Name 397 "uv" + Name 401 "bv" + Name 462 "Block" + MemberName 462(Block) 0 "i64v" + MemberName 462(Block) 1 "u64" + Name 464 "block" + Name 465 "si64" + Name 466 "su64" + Name 467 "si" + Name 468 "su" + Name 469 "sb" MemberDecorate 28(Uniforms) 0 Offset 0 Decorate 28(Uniforms) Block Decorate 30 DescriptorSet 0 Decorate 30 Binding 0 - MemberDecorate 457(Block) 0 Offset 0 - MemberDecorate 457(Block) 1 Offset 24 - Decorate 457(Block) Block - Decorate 459(block) DescriptorSet 0 - Decorate 459(block) Binding 1 - Decorate 460(si64) SpecId 100 - Decorate 461(su64) SpecId 101 - Decorate 462(si) SpecId 102 - Decorate 463(su) SpecId 103 - Decorate 464(sb) SpecId 104 + MemberDecorate 462(Block) 0 Offset 0 + MemberDecorate 462(Block) 1 Offset 24 + Decorate 462(Block) Block + Decorate 464(block) DescriptorSet 0 + Decorate 464(block) Binding 1 + Decorate 465(si64) SpecId 100 + Decorate 466(su64) SpecId 101 + Decorate 467(si) SpecId 102 + Decorate 468(su) SpecId 103 + Decorate 469(sb) SpecId 104 2: TypeVoid 3: TypeFunction 2 14: TypeInt 64 0 @@ -128,52 +128,53 @@ spv.int64.frag 158: TypePointer Function 31(int) 164: TypeVector 21(int) 3 165: TypePointer Function 164(ivec3) + 199: TypeVector 31(int) 3 203: 21(int) Constant 1 204: TypePointer Function 21(int) - 212: 21(int) Constant 2 - 220: TypePointer Function 55(bool) - 222: 21(int) Constant 0 - 292: 52(ivec2) ConstantComposite 25 25 - 301: 132(ivec3) ConstantComposite 69 69 69 - 343: 55(bool) ConstantTrue - 350: 55(bool) ConstantFalse - 351: 56(bvec2) ConstantComposite 350 350 - 363: TypeVector 55(bool) 3 - 364: 363(bvec3) ConstantComposite 350 350 350 - 366: TypeVector 94(float) 3 - 367: TypePointer Function 366(fvec3) - 372: TypePointer Function 94(float) - 383: 31(int) Constant 1 - 384: 31(int) Constant 2 - 385: 74(ivec2) ConstantComposite 383 384 - 390: 81(ivec2) ConstantComposite 212 22 - 395: TypePointer Function 363(bvec3) - 457(Block): TypeStruct 136(ivec3) 14(int) - 458: TypePointer Uniform 457(Block) - 459(block): 458(ptr) Variable Uniform - 460(si64): 18(int) SpecConstant 4294967286 4294967295 - 461(su64): 14(int) SpecConstant 20 0 - 462(si): 31(int) SpecConstant 4294967291 - 463(su): 21(int) SpecConstant 4 - 464(sb): 55(bool) SpecConstantTrue - 465: 55(bool) SpecConstantOp 171 460(si64) 69 - 466: 55(bool) SpecConstantOp 171 461(su64) 69 - 467: 18(int) SpecConstantOp 169 464(sb) 61 60 - 468: 14(int) SpecConstantOp 169 464(sb) 70 69 - 469: 31(int) SpecConstantOp 114 460(si64) - 470: 18(int) SpecConstantOp 114 462(si) - 471: 21(int) SpecConstantOp 113 461(su64) - 472: 14(int) SpecConstantOp 113 463(su) - 473: 18(int) SpecConstantOp 128 461(su64) 69 - 474: 14(int) SpecConstantOp 128 460(si64) 69 - 475: 31(int) SpecConstantOp 113 461(su64) - 476: 31(int) SpecConstantOp 128 475 222 - 477: 18(int) SpecConstantOp 114 462(si) - 478: 14(int) SpecConstantOp 128 477 69 - 479: 31(int) SpecConstantOp 114 460(si64) - 480: 21(int) SpecConstantOp 128 479 222 - 481: 18(int) SpecConstantOp 113 463(su) - 482: 18(int) SpecConstantOp 128 481 69 + 217: 21(int) Constant 2 + 225: TypePointer Function 55(bool) + 227: 21(int) Constant 0 + 297: 52(ivec2) ConstantComposite 25 25 + 306: 132(ivec3) ConstantComposite 69 69 69 + 348: 55(bool) ConstantTrue + 355: 55(bool) ConstantFalse + 356: 56(bvec2) ConstantComposite 355 355 + 368: TypeVector 55(bool) 3 + 369: 368(bvec3) ConstantComposite 355 355 355 + 371: TypeVector 94(float) 3 + 372: TypePointer Function 371(fvec3) + 377: TypePointer Function 94(float) + 388: 31(int) Constant 1 + 389: 31(int) Constant 2 + 390: 74(ivec2) ConstantComposite 388 389 + 395: 81(ivec2) ConstantComposite 217 22 + 400: TypePointer Function 368(bvec3) + 462(Block): TypeStruct 136(ivec3) 14(int) + 463: TypePointer Uniform 462(Block) + 464(block): 463(ptr) Variable Uniform + 465(si64): 18(int) SpecConstant 4294967286 4294967295 + 466(su64): 14(int) SpecConstant 20 0 + 467(si): 31(int) SpecConstant 4294967291 + 468(su): 21(int) SpecConstant 4 + 469(sb): 55(bool) SpecConstantTrue + 470: 55(bool) SpecConstantOp 171 465(si64) 69 + 471: 55(bool) SpecConstantOp 171 466(su64) 69 + 472: 18(int) SpecConstantOp 169 469(sb) 61 60 + 473: 14(int) SpecConstantOp 169 469(sb) 70 69 + 474: 31(int) SpecConstantOp 114 465(si64) + 475: 18(int) SpecConstantOp 114 467(si) + 476: 21(int) SpecConstantOp 113 466(su64) + 477: 14(int) SpecConstantOp 113 468(su) + 478: 18(int) SpecConstantOp 128 466(su64) 69 + 479: 14(int) SpecConstantOp 128 465(si64) 69 + 480: 31(int) SpecConstantOp 113 466(su64) + 481: 31(int) SpecConstantOp 128 480 227 + 482: 18(int) SpecConstantOp 114 467(si) + 483: 14(int) SpecConstantOp 128 482 69 + 484: 31(int) SpecConstantOp 114 465(si64) + 485: 21(int) SpecConstantOp 128 484 227 + 486: 18(int) SpecConstantOp 113 468(su) + 487: 18(int) SpecConstantOp 128 486 69 4(main): 2 Function None 3 5: Label Store 16(u64Max) 17 @@ -286,7 +287,7 @@ spv.int64.frag 139(i64): 19(ptr) Variable Function 159(i): 158(ptr) Variable Function 166(uv): 165(ptr) Variable Function - 221(b): 220(ptr) Variable Function + 226(b): 225(ptr) Variable Function 135: 132(ivec3) Load 134(u64v) 137: 136(ivec3) CompositeConstruct 61 61 61 138: 132(ivec3) IAdd 135 137 @@ -359,302 +360,308 @@ spv.int64.frag 195: 18(int) SConvert 194 196: 18(int) SMod 193 195 Store 139(i64) 196 - 197: 31(int) Load 159(i) - 198: 18(int) SConvert 197 - 199: 14(int) Bitcast 198 - 200: 132(ivec3) Load 134(u64v) - 201: 132(ivec3) CompositeConstruct 199 199 199 - 202: 132(ivec3) ShiftLeftLogical 200 201 - Store 134(u64v) 202 + 197: 132(ivec3) Load 134(u64v) + 198: 31(int) Load 159(i) + 200: 199(ivec3) CompositeConstruct 198 198 198 + 201: 132(ivec3) ShiftLeftLogical 197 200 + Store 134(u64v) 201 + 202: 18(int) Load 139(i64) 205: 204(ptr) AccessChain 166(uv) 203 206: 21(int) Load 205 - 207: 18(int) UConvert 206 - 208: 18(int) Bitcast 207 - 209: 18(int) Load 139(i64) - 210: 18(int) ShiftRightArithmetic 209 208 - Store 139(i64) 210 - 211: 18(int) Load 139(i64) - 213: 40(ptr) AccessChain 134(u64v) 212 - 214: 14(int) Load 213 - 215: 18(int) ShiftLeftLogical 211 214 + 207: 18(int) ShiftRightArithmetic 202 206 + Store 139(i64) 207 + 208: 31(int) Load 159(i) + 209: 132(ivec3) Load 134(u64v) + 210: 199(ivec3) CompositeConstruct 208 208 208 + 211: 132(ivec3) ShiftLeftLogical 209 210 + Store 134(u64v) 211 + 212: 204(ptr) AccessChain 166(uv) 203 + 213: 21(int) Load 212 + 214: 18(int) Load 139(i64) + 215: 18(int) ShiftRightArithmetic 214 213 Store 139(i64) 215 - 216: 132(ivec3) Load 134(u64v) - 217: 18(int) Load 139(i64) - 218: 136(ivec3) CompositeConstruct 217 217 217 - 219: 132(ivec3) ShiftLeftLogical 216 218 - Store 134(u64v) 219 - 223: 40(ptr) AccessChain 134(u64v) 222 - 224: 14(int) Load 223 - 225: 18(int) Load 139(i64) - 226: 14(int) Bitcast 225 - 227: 55(bool) INotEqual 224 226 - Store 221(b) 227 - 228: 18(int) Load 139(i64) - 229: 14(int) Bitcast 228 - 230: 40(ptr) AccessChain 134(u64v) 222 - 231: 14(int) Load 230 - 232: 55(bool) IEqual 229 231 - Store 221(b) 232 - 233: 40(ptr) AccessChain 134(u64v) 222 - 234: 14(int) Load 233 - 235: 204(ptr) AccessChain 166(uv) 203 - 236: 21(int) Load 235 - 237: 14(int) UConvert 236 - 238: 55(bool) UGreaterThan 234 237 - Store 221(b) 238 - 239: 18(int) Load 139(i64) - 240: 31(int) Load 159(i) - 241: 18(int) SConvert 240 - 242: 55(bool) SLessThan 239 241 - Store 221(b) 242 - 243: 40(ptr) AccessChain 134(u64v) 203 - 244: 14(int) Load 243 - 245: 204(ptr) AccessChain 166(uv) 222 - 246: 21(int) Load 245 - 247: 14(int) UConvert 246 - 248: 55(bool) UGreaterThanEqual 244 247 - Store 221(b) 248 - 249: 18(int) Load 139(i64) - 250: 31(int) Load 159(i) - 251: 18(int) SConvert 250 - 252: 55(bool) SLessThanEqual 249 251 - Store 221(b) 252 - 253: 31(int) Load 159(i) - 254: 18(int) SConvert 253 - 255: 14(int) Bitcast 254 - 256: 132(ivec3) Load 134(u64v) - 257: 132(ivec3) CompositeConstruct 255 255 255 - 258: 132(ivec3) BitwiseOr 256 257 - Store 134(u64v) 258 - 259: 18(int) Load 139(i64) - 260: 31(int) Load 159(i) - 261: 18(int) SConvert 260 - 262: 18(int) BitwiseOr 259 261 - Store 139(i64) 262 - 263: 31(int) Load 159(i) - 264: 18(int) SConvert 263 - 265: 18(int) Load 139(i64) - 266: 18(int) BitwiseAnd 265 264 - Store 139(i64) 266 - 267: 132(ivec3) Load 134(u64v) - 268: 164(ivec3) Load 166(uv) - 269: 132(ivec3) UConvert 268 - 270: 132(ivec3) BitwiseAnd 267 269 - Store 134(u64v) 270 - 271: 18(int) Load 139(i64) - 272: 14(int) Bitcast 271 - 273: 132(ivec3) Load 134(u64v) - 274: 132(ivec3) CompositeConstruct 272 272 272 - 275: 132(ivec3) BitwiseXor 273 274 + 216: 18(int) Load 139(i64) + 218: 40(ptr) AccessChain 134(u64v) 217 + 219: 14(int) Load 218 + 220: 18(int) ShiftLeftLogical 216 219 + Store 139(i64) 220 + 221: 132(ivec3) Load 134(u64v) + 222: 18(int) Load 139(i64) + 223: 136(ivec3) CompositeConstruct 222 222 222 + 224: 132(ivec3) ShiftLeftLogical 221 223 + Store 134(u64v) 224 + 228: 40(ptr) AccessChain 134(u64v) 227 + 229: 14(int) Load 228 + 230: 18(int) Load 139(i64) + 231: 14(int) Bitcast 230 + 232: 55(bool) INotEqual 229 231 + Store 226(b) 232 + 233: 18(int) Load 139(i64) + 234: 14(int) Bitcast 233 + 235: 40(ptr) AccessChain 134(u64v) 227 + 236: 14(int) Load 235 + 237: 55(bool) IEqual 234 236 + Store 226(b) 237 + 238: 40(ptr) AccessChain 134(u64v) 227 + 239: 14(int) Load 238 + 240: 204(ptr) AccessChain 166(uv) 203 + 241: 21(int) Load 240 + 242: 14(int) UConvert 241 + 243: 55(bool) UGreaterThan 239 242 + Store 226(b) 243 + 244: 18(int) Load 139(i64) + 245: 31(int) Load 159(i) + 246: 18(int) SConvert 245 + 247: 55(bool) SLessThan 244 246 + Store 226(b) 247 + 248: 40(ptr) AccessChain 134(u64v) 203 + 249: 14(int) Load 248 + 250: 204(ptr) AccessChain 166(uv) 227 + 251: 21(int) Load 250 + 252: 14(int) UConvert 251 + 253: 55(bool) UGreaterThanEqual 249 252 + Store 226(b) 253 + 254: 18(int) Load 139(i64) + 255: 31(int) Load 159(i) + 256: 18(int) SConvert 255 + 257: 55(bool) SLessThanEqual 254 256 + Store 226(b) 257 + 258: 31(int) Load 159(i) + 259: 18(int) SConvert 258 + 260: 14(int) Bitcast 259 + 261: 132(ivec3) Load 134(u64v) + 262: 132(ivec3) CompositeConstruct 260 260 260 + 263: 132(ivec3) BitwiseOr 261 262 + Store 134(u64v) 263 + 264: 18(int) Load 139(i64) + 265: 31(int) Load 159(i) + 266: 18(int) SConvert 265 + 267: 18(int) BitwiseOr 264 266 + Store 139(i64) 267 + 268: 31(int) Load 159(i) + 269: 18(int) SConvert 268 + 270: 18(int) Load 139(i64) + 271: 18(int) BitwiseAnd 270 269 + Store 139(i64) 271 + 272: 132(ivec3) Load 134(u64v) + 273: 164(ivec3) Load 166(uv) + 274: 132(ivec3) UConvert 273 + 275: 132(ivec3) BitwiseAnd 272 274 Store 134(u64v) 275 - 276: 132(ivec3) Load 134(u64v) - 277: 18(int) Load 139(i64) - 278: 14(int) Bitcast 277 - 279: 132(ivec3) CompositeConstruct 278 278 278 - 280: 132(ivec3) BitwiseXor 276 279 + 276: 18(int) Load 139(i64) + 277: 14(int) Bitcast 276 + 278: 132(ivec3) Load 134(u64v) + 279: 132(ivec3) CompositeConstruct 277 277 277 + 280: 132(ivec3) BitwiseXor 278 279 Store 134(u64v) 280 + 281: 132(ivec3) Load 134(u64v) + 282: 18(int) Load 139(i64) + 283: 14(int) Bitcast 282 + 284: 132(ivec3) CompositeConstruct 283 283 283 + 285: 132(ivec3) BitwiseXor 281 284 + Store 134(u64v) 285 Return FunctionEnd 12(builtinFuncs(): 2 Function None 3 13: Label - 281(i64v): 53(ptr) Variable Function - 284(i64): 19(ptr) Variable Function - 294(u64v): 133(ptr) Variable Function - 296(u64): 40(ptr) Variable Function - 368(dv): 367(ptr) Variable Function - 387(iv): 75(ptr) Variable Function - 392(uv): 82(ptr) Variable Function - 396(bv): 395(ptr) Variable Function - 282: 52(ivec2) Load 281(i64v) - 283: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 282 - Store 281(i64v) 283 - 285: 18(int) Load 284(i64) - 286: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 285 - Store 284(i64) 286 - 287: 52(ivec2) Load 281(i64v) - 288: 18(int) Load 284(i64) - 289: 52(ivec2) CompositeConstruct 288 288 - 290: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 287 289 - Store 281(i64v) 290 - 291: 52(ivec2) Load 281(i64v) - 293: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 291 292 - Store 281(i64v) 293 - 295: 132(ivec3) Load 294(u64v) - 297: 14(int) Load 296(u64) - 298: 132(ivec3) CompositeConstruct 297 297 297 - 299: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 295 298 - Store 294(u64v) 299 - 300: 132(ivec3) Load 294(u64v) - 302: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 300 301 - Store 294(u64v) 302 - 303: 52(ivec2) Load 281(i64v) - 304: 18(int) Load 284(i64) - 305: 52(ivec2) CompositeConstruct 304 304 - 306: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 303 305 - Store 281(i64v) 306 - 307: 52(ivec2) Load 281(i64v) - 308: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 307 292 - Store 281(i64v) 308 - 309: 132(ivec3) Load 294(u64v) - 310: 14(int) Load 296(u64) - 311: 132(ivec3) CompositeConstruct 310 310 310 - 312: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 309 311 - Store 294(u64v) 312 - 313: 132(ivec3) Load 294(u64v) - 314: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 313 301 - Store 294(u64v) 314 - 315: 52(ivec2) Load 281(i64v) - 316: 18(int) Load 284(i64) - 317: 18(int) SNegate 316 - 318: 18(int) Load 284(i64) - 319: 52(ivec2) CompositeConstruct 317 317 - 320: 52(ivec2) CompositeConstruct 318 318 - 321: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 315 319 320 - Store 281(i64v) 321 - 322: 52(ivec2) Load 281(i64v) - 323: 52(ivec2) Load 281(i64v) - 324: 52(ivec2) SNegate 323 - 325: 52(ivec2) Load 281(i64v) - 326: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 322 324 325 - Store 281(i64v) 326 - 327: 132(ivec3) Load 294(u64v) - 328: 14(int) Load 296(u64) - 329: 14(int) SNegate 328 - 330: 14(int) Load 296(u64) - 331: 132(ivec3) CompositeConstruct 329 329 329 - 332: 132(ivec3) CompositeConstruct 330 330 330 - 333: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 327 331 332 - Store 294(u64v) 333 - 334: 132(ivec3) Load 294(u64v) - 335: 132(ivec3) Load 294(u64v) - 336: 132(ivec3) SNegate 335 - 337: 132(ivec3) Load 294(u64v) - 338: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 334 336 337 - Store 294(u64v) 338 - 339: 19(ptr) AccessChain 281(i64v) 222 - 340: 18(int) Load 339 - 341: 19(ptr) AccessChain 281(i64v) 203 - 342: 18(int) Load 341 - 344: 18(int) Select 343 342 340 - Store 284(i64) 344 - 345: 18(int) Load 284(i64) - 346: 52(ivec2) CompositeConstruct 345 345 - 347: 18(int) Load 284(i64) - 348: 18(int) SNegate 347 - 349: 52(ivec2) CompositeConstruct 348 348 - 352: 52(ivec2) Select 351 349 346 - Store 281(i64v) 352 - 353: 40(ptr) AccessChain 294(u64v) 222 - 354: 14(int) Load 353 - 355: 40(ptr) AccessChain 294(u64v) 203 - 356: 14(int) Load 355 - 357: 14(int) Select 343 356 354 - Store 296(u64) 357 - 358: 14(int) Load 296(u64) - 359: 132(ivec3) CompositeConstruct 358 358 358 - 360: 14(int) Load 296(u64) - 361: 14(int) SNegate 360 - 362: 132(ivec3) CompositeConstruct 361 361 361 - 365: 132(ivec3) Select 364 362 359 - Store 294(u64v) 365 - 369: 366(fvec3) Load 368(dv) - 370: 95(fvec2) VectorShuffle 369 369 0 1 - 371: 52(ivec2) Bitcast 370 - Store 281(i64v) 371 - 373: 372(ptr) AccessChain 368(dv) 212 - 374: 94(float) Load 373 - 375: 14(int) Bitcast 374 - 376: 40(ptr) AccessChain 294(u64v) 222 - Store 376 375 - 377: 52(ivec2) Load 281(i64v) - 378: 95(fvec2) Bitcast 377 - 379: 366(fvec3) Load 368(dv) - 380: 366(fvec3) VectorShuffle 379 378 3 4 2 - Store 368(dv) 380 - 381: 132(ivec3) Load 294(u64v) - 382: 366(fvec3) Bitcast 381 - Store 368(dv) 382 - 386: 18(int) Bitcast 385 - Store 284(i64) 386 - 388: 18(int) Load 284(i64) - 389: 74(ivec2) Bitcast 388 - Store 387(iv) 389 - 391: 14(int) Bitcast 390 - Store 296(u64) 391 - 393: 14(int) Load 296(u64) - 394: 81(ivec2) Bitcast 393 - Store 392(uv) 394 - 397: 132(ivec3) Load 294(u64v) - 398: 14(int) Load 296(u64) - 399: 132(ivec3) CompositeConstruct 398 398 398 - 400: 363(bvec3) ULessThan 397 399 - Store 396(bv) 400 - 401: 52(ivec2) Load 281(i64v) - 402: 18(int) Load 284(i64) - 403: 52(ivec2) CompositeConstruct 402 402 - 404: 56(bvec2) SLessThan 401 403 - 405: 363(bvec3) Load 396(bv) - 406: 363(bvec3) VectorShuffle 405 404 3 4 2 - Store 396(bv) 406 - 407: 132(ivec3) Load 294(u64v) - 408: 14(int) Load 296(u64) - 409: 132(ivec3) CompositeConstruct 408 408 408 - 410: 363(bvec3) ULessThanEqual 407 409 - Store 396(bv) 410 - 411: 52(ivec2) Load 281(i64v) - 412: 18(int) Load 284(i64) - 413: 52(ivec2) CompositeConstruct 412 412 - 414: 56(bvec2) SLessThanEqual 411 413 - 415: 363(bvec3) Load 396(bv) - 416: 363(bvec3) VectorShuffle 415 414 3 4 2 - Store 396(bv) 416 - 417: 132(ivec3) Load 294(u64v) - 418: 14(int) Load 296(u64) - 419: 132(ivec3) CompositeConstruct 418 418 418 - 420: 363(bvec3) UGreaterThan 417 419 - Store 396(bv) 420 - 421: 52(ivec2) Load 281(i64v) - 422: 18(int) Load 284(i64) - 423: 52(ivec2) CompositeConstruct 422 422 - 424: 56(bvec2) SGreaterThan 421 423 - 425: 363(bvec3) Load 396(bv) - 426: 363(bvec3) VectorShuffle 425 424 3 4 2 - Store 396(bv) 426 - 427: 132(ivec3) Load 294(u64v) - 428: 14(int) Load 296(u64) - 429: 132(ivec3) CompositeConstruct 428 428 428 - 430: 363(bvec3) UGreaterThanEqual 427 429 - Store 396(bv) 430 - 431: 52(ivec2) Load 281(i64v) - 432: 18(int) Load 284(i64) - 433: 52(ivec2) CompositeConstruct 432 432 - 434: 56(bvec2) SGreaterThanEqual 431 433 - 435: 363(bvec3) Load 396(bv) - 436: 363(bvec3) VectorShuffle 435 434 3 4 2 - Store 396(bv) 436 - 437: 132(ivec3) Load 294(u64v) - 438: 14(int) Load 296(u64) - 439: 132(ivec3) CompositeConstruct 438 438 438 - 440: 363(bvec3) IEqual 437 439 - Store 396(bv) 440 - 441: 52(ivec2) Load 281(i64v) - 442: 18(int) Load 284(i64) - 443: 52(ivec2) CompositeConstruct 442 442 - 444: 56(bvec2) IEqual 441 443 - 445: 363(bvec3) Load 396(bv) - 446: 363(bvec3) VectorShuffle 445 444 3 4 2 - Store 396(bv) 446 - 447: 132(ivec3) Load 294(u64v) - 448: 14(int) Load 296(u64) - 449: 132(ivec3) CompositeConstruct 448 448 448 - 450: 363(bvec3) INotEqual 447 449 - Store 396(bv) 450 - 451: 52(ivec2) Load 281(i64v) - 452: 18(int) Load 284(i64) - 453: 52(ivec2) CompositeConstruct 452 452 - 454: 56(bvec2) INotEqual 451 453 - 455: 363(bvec3) Load 396(bv) - 456: 363(bvec3) VectorShuffle 455 454 3 4 2 - Store 396(bv) 456 + 286(i64v): 53(ptr) Variable Function + 289(i64): 19(ptr) Variable Function + 299(u64v): 133(ptr) Variable Function + 301(u64): 40(ptr) Variable Function + 373(dv): 372(ptr) Variable Function + 392(iv): 75(ptr) Variable Function + 397(uv): 82(ptr) Variable Function + 401(bv): 400(ptr) Variable Function + 287: 52(ivec2) Load 286(i64v) + 288: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 287 + Store 286(i64v) 288 + 290: 18(int) Load 289(i64) + 291: 18(int) ExtInst 1(GLSL.std.450) 7(SSign) 290 + Store 289(i64) 291 + 292: 52(ivec2) Load 286(i64v) + 293: 18(int) Load 289(i64) + 294: 52(ivec2) CompositeConstruct 293 293 + 295: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 292 294 + Store 286(i64v) 295 + 296: 52(ivec2) Load 286(i64v) + 298: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 296 297 + Store 286(i64v) 298 + 300: 132(ivec3) Load 299(u64v) + 302: 14(int) Load 301(u64) + 303: 132(ivec3) CompositeConstruct 302 302 302 + 304: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 300 303 + Store 299(u64v) 304 + 305: 132(ivec3) Load 299(u64v) + 307: 132(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 305 306 + Store 299(u64v) 307 + 308: 52(ivec2) Load 286(i64v) + 309: 18(int) Load 289(i64) + 310: 52(ivec2) CompositeConstruct 309 309 + 311: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 308 310 + Store 286(i64v) 311 + 312: 52(ivec2) Load 286(i64v) + 313: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 312 297 + Store 286(i64v) 313 + 314: 132(ivec3) Load 299(u64v) + 315: 14(int) Load 301(u64) + 316: 132(ivec3) CompositeConstruct 315 315 315 + 317: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 314 316 + Store 299(u64v) 317 + 318: 132(ivec3) Load 299(u64v) + 319: 132(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 318 306 + Store 299(u64v) 319 + 320: 52(ivec2) Load 286(i64v) + 321: 18(int) Load 289(i64) + 322: 18(int) SNegate 321 + 323: 18(int) Load 289(i64) + 324: 52(ivec2) CompositeConstruct 322 322 + 325: 52(ivec2) CompositeConstruct 323 323 + 326: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 320 324 325 + Store 286(i64v) 326 + 327: 52(ivec2) Load 286(i64v) + 328: 52(ivec2) Load 286(i64v) + 329: 52(ivec2) SNegate 328 + 330: 52(ivec2) Load 286(i64v) + 331: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 327 329 330 + Store 286(i64v) 331 + 332: 132(ivec3) Load 299(u64v) + 333: 14(int) Load 301(u64) + 334: 14(int) SNegate 333 + 335: 14(int) Load 301(u64) + 336: 132(ivec3) CompositeConstruct 334 334 334 + 337: 132(ivec3) CompositeConstruct 335 335 335 + 338: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 332 336 337 + Store 299(u64v) 338 + 339: 132(ivec3) Load 299(u64v) + 340: 132(ivec3) Load 299(u64v) + 341: 132(ivec3) SNegate 340 + 342: 132(ivec3) Load 299(u64v) + 343: 132(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 339 341 342 + Store 299(u64v) 343 + 344: 19(ptr) AccessChain 286(i64v) 227 + 345: 18(int) Load 344 + 346: 19(ptr) AccessChain 286(i64v) 203 + 347: 18(int) Load 346 + 349: 18(int) Select 348 347 345 + Store 289(i64) 349 + 350: 18(int) Load 289(i64) + 351: 52(ivec2) CompositeConstruct 350 350 + 352: 18(int) Load 289(i64) + 353: 18(int) SNegate 352 + 354: 52(ivec2) CompositeConstruct 353 353 + 357: 52(ivec2) Select 356 354 351 + Store 286(i64v) 357 + 358: 40(ptr) AccessChain 299(u64v) 227 + 359: 14(int) Load 358 + 360: 40(ptr) AccessChain 299(u64v) 203 + 361: 14(int) Load 360 + 362: 14(int) Select 348 361 359 + Store 301(u64) 362 + 363: 14(int) Load 301(u64) + 364: 132(ivec3) CompositeConstruct 363 363 363 + 365: 14(int) Load 301(u64) + 366: 14(int) SNegate 365 + 367: 132(ivec3) CompositeConstruct 366 366 366 + 370: 132(ivec3) Select 369 367 364 + Store 299(u64v) 370 + 374: 371(fvec3) Load 373(dv) + 375: 95(fvec2) VectorShuffle 374 374 0 1 + 376: 52(ivec2) Bitcast 375 + Store 286(i64v) 376 + 378: 377(ptr) AccessChain 373(dv) 217 + 379: 94(float) Load 378 + 380: 14(int) Bitcast 379 + 381: 40(ptr) AccessChain 299(u64v) 227 + Store 381 380 + 382: 52(ivec2) Load 286(i64v) + 383: 95(fvec2) Bitcast 382 + 384: 371(fvec3) Load 373(dv) + 385: 371(fvec3) VectorShuffle 384 383 3 4 2 + Store 373(dv) 385 + 386: 132(ivec3) Load 299(u64v) + 387: 371(fvec3) Bitcast 386 + Store 373(dv) 387 + 391: 18(int) Bitcast 390 + Store 289(i64) 391 + 393: 18(int) Load 289(i64) + 394: 74(ivec2) Bitcast 393 + Store 392(iv) 394 + 396: 14(int) Bitcast 395 + Store 301(u64) 396 + 398: 14(int) Load 301(u64) + 399: 81(ivec2) Bitcast 398 + Store 397(uv) 399 + 402: 132(ivec3) Load 299(u64v) + 403: 14(int) Load 301(u64) + 404: 132(ivec3) CompositeConstruct 403 403 403 + 405: 368(bvec3) ULessThan 402 404 + Store 401(bv) 405 + 406: 52(ivec2) Load 286(i64v) + 407: 18(int) Load 289(i64) + 408: 52(ivec2) CompositeConstruct 407 407 + 409: 56(bvec2) SLessThan 406 408 + 410: 368(bvec3) Load 401(bv) + 411: 368(bvec3) VectorShuffle 410 409 3 4 2 + Store 401(bv) 411 + 412: 132(ivec3) Load 299(u64v) + 413: 14(int) Load 301(u64) + 414: 132(ivec3) CompositeConstruct 413 413 413 + 415: 368(bvec3) ULessThanEqual 412 414 + Store 401(bv) 415 + 416: 52(ivec2) Load 286(i64v) + 417: 18(int) Load 289(i64) + 418: 52(ivec2) CompositeConstruct 417 417 + 419: 56(bvec2) SLessThanEqual 416 418 + 420: 368(bvec3) Load 401(bv) + 421: 368(bvec3) VectorShuffle 420 419 3 4 2 + Store 401(bv) 421 + 422: 132(ivec3) Load 299(u64v) + 423: 14(int) Load 301(u64) + 424: 132(ivec3) CompositeConstruct 423 423 423 + 425: 368(bvec3) UGreaterThan 422 424 + Store 401(bv) 425 + 426: 52(ivec2) Load 286(i64v) + 427: 18(int) Load 289(i64) + 428: 52(ivec2) CompositeConstruct 427 427 + 429: 56(bvec2) SGreaterThan 426 428 + 430: 368(bvec3) Load 401(bv) + 431: 368(bvec3) VectorShuffle 430 429 3 4 2 + Store 401(bv) 431 + 432: 132(ivec3) Load 299(u64v) + 433: 14(int) Load 301(u64) + 434: 132(ivec3) CompositeConstruct 433 433 433 + 435: 368(bvec3) UGreaterThanEqual 432 434 + Store 401(bv) 435 + 436: 52(ivec2) Load 286(i64v) + 437: 18(int) Load 289(i64) + 438: 52(ivec2) CompositeConstruct 437 437 + 439: 56(bvec2) SGreaterThanEqual 436 438 + 440: 368(bvec3) Load 401(bv) + 441: 368(bvec3) VectorShuffle 440 439 3 4 2 + Store 401(bv) 441 + 442: 132(ivec3) Load 299(u64v) + 443: 14(int) Load 301(u64) + 444: 132(ivec3) CompositeConstruct 443 443 443 + 445: 368(bvec3) IEqual 442 444 + Store 401(bv) 445 + 446: 52(ivec2) Load 286(i64v) + 447: 18(int) Load 289(i64) + 448: 52(ivec2) CompositeConstruct 447 447 + 449: 56(bvec2) IEqual 446 448 + 450: 368(bvec3) Load 401(bv) + 451: 368(bvec3) VectorShuffle 450 449 3 4 2 + Store 401(bv) 451 + 452: 132(ivec3) Load 299(u64v) + 453: 14(int) Load 301(u64) + 454: 132(ivec3) CompositeConstruct 453 453 453 + 455: 368(bvec3) INotEqual 452 454 + Store 401(bv) 455 + 456: 52(ivec2) Load 286(i64v) + 457: 18(int) Load 289(i64) + 458: 52(ivec2) CompositeConstruct 457 457 + 459: 56(bvec2) INotEqual 456 458 + 460: 368(bvec3) Load 401(bv) + 461: 368(bvec3) VectorShuffle 460 459 3 4 2 + Store 401(bv) 461 Return FunctionEnd diff --git a/Test/baseResults/spv.rankShift.comp.out b/Test/baseResults/spv.rankShift.comp.out new file mode 100755 index 00000000..4cdb6d5d --- /dev/null +++ b/Test/baseResults/spv.rankShift.comp.out @@ -0,0 +1,57 @@ +spv.rankShift.comp +// Module Version 10000 +// Generated by (magic number): 80006 +// Id's are bound by 33 + + Capability Shader + Capability Int64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 54 1 1 + Source GLSL 450 + SourceExtension "GL_ARB_gpu_shader_int64" + Name 4 "main" + Name 8 "result" + Name 11 "arg0" + Name 15 "arg1" + Decorate 11(arg0) Location 4 + Decorate 15(arg1) Location 5 + Decorate 32 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 64 0 + 7: TypePointer Function 6(int) + 9: TypeInt 64 1 + 10: TypePointer UniformConstant 9(int) + 11(arg0): 10(ptr) Variable UniformConstant + 13: TypeInt 32 0 + 14: TypePointer UniformConstant 13(int) + 15(arg1): 14(ptr) Variable UniformConstant + 29: TypeVector 13(int) 3 + 30: 13(int) Constant 54 + 31: 13(int) Constant 1 + 32: 29(ivec3) ConstantComposite 30 31 31 + 4(main): 2 Function None 3 + 5: Label + 8(result): 7(ptr) Variable Function + 12: 9(int) Load 11(arg0) + 16: 13(int) Load 15(arg1) + 17: 9(int) ShiftLeftLogical 12 16 + 18: 6(int) Bitcast 17 + Store 8(result) 18 + 19: 9(int) Load 11(arg0) + 20: 13(int) Load 15(arg1) + 21: 9(int) ShiftRightArithmetic 19 20 + 22: 6(int) Bitcast 21 + Store 8(result) 22 + 23: 13(int) Load 15(arg1) + 24: 6(int) Load 8(result) + 25: 6(int) ShiftLeftLogical 24 23 + Store 8(result) 25 + 26: 13(int) Load 15(arg1) + 27: 6(int) Load 8(result) + 28: 6(int) ShiftRightLogical 27 26 + Store 8(result) 28 + Return + FunctionEnd diff --git a/Test/baseResults/spv.vulkan110.int16.frag.out b/Test/baseResults/spv.vulkan110.int16.frag.out index c8135a1d..6639dc7b 100755 --- a/Test/baseResults/spv.vulkan110.int16.frag.out +++ b/Test/baseResults/spv.vulkan110.int16.frag.out @@ -1,7 +1,7 @@ spv.vulkan110.int16.frag // Module Version 10300 // Generated by (magic number): 80006 -// Id's are bound by 525 +// Id's are bound by 523 Capability Shader Capability Float16 @@ -52,48 +52,48 @@ spv.vulkan110.int16.frag Name 220 "i" Name 227 "uv" Name 243 "i64" - Name 283 "b" - Name 345 "i16v" - Name 348 "i16" - Name 358 "u16v" - Name 360 "u16" - Name 430 "i32" - Name 433 "i64" - Name 436 "i16v4" - Name 439 "u32" - Name 440 "u16v2" - Name 444 "u64" - Name 447 "u16v4" - Name 459 "bv" - Name 520 "Block" - MemberName 520(Block) 0 "i16" - MemberName 520(Block) 1 "i16v2" - MemberName 520(Block) 2 "i16v3" - MemberName 520(Block) 3 "i16v4" - MemberName 520(Block) 4 "u16" - MemberName 520(Block) 5 "u16v2" - MemberName 520(Block) 6 "u16v3" - MemberName 520(Block) 7 "u16v4" - Name 522 "block" - Name 523 "si16" - Name 524 "su16" + Name 281 "b" + Name 343 "i16v" + Name 346 "i16" + Name 356 "u16v" + Name 358 "u16" + Name 428 "i32" + Name 431 "i64" + Name 434 "i16v4" + Name 437 "u32" + Name 438 "u16v2" + Name 442 "u64" + Name 445 "u16v4" + Name 457 "bv" + Name 518 "Block" + MemberName 518(Block) 0 "i16" + MemberName 518(Block) 1 "i16v2" + MemberName 518(Block) 2 "i16v3" + MemberName 518(Block) 3 "i16v4" + MemberName 518(Block) 4 "u16" + MemberName 518(Block) 5 "u16v2" + MemberName 518(Block) 6 "u16v3" + MemberName 518(Block) 7 "u16v4" + Name 520 "block" + Name 521 "si16" + Name 522 "su16" MemberDecorate 24(Uniforms) 0 Offset 0 Decorate 24(Uniforms) Block Decorate 26 DescriptorSet 0 Decorate 26 Binding 0 - MemberDecorate 520(Block) 0 Offset 0 - MemberDecorate 520(Block) 1 Offset 4 - MemberDecorate 520(Block) 2 Offset 8 - MemberDecorate 520(Block) 3 Offset 16 - MemberDecorate 520(Block) 4 Offset 24 - MemberDecorate 520(Block) 5 Offset 28 - MemberDecorate 520(Block) 6 Offset 32 - MemberDecorate 520(Block) 7 Offset 40 - Decorate 520(Block) Block - Decorate 522(block) DescriptorSet 0 - Decorate 522(block) Binding 1 - Decorate 523(si16) SpecId 100 - Decorate 524(su16) SpecId 101 + MemberDecorate 518(Block) 0 Offset 0 + MemberDecorate 518(Block) 1 Offset 4 + MemberDecorate 518(Block) 2 Offset 8 + MemberDecorate 518(Block) 3 Offset 16 + MemberDecorate 518(Block) 4 Offset 24 + MemberDecorate 518(Block) 5 Offset 28 + MemberDecorate 518(Block) 6 Offset 32 + MemberDecorate 518(Block) 7 Offset 40 + Decorate 518(Block) Block + Decorate 520(block) DescriptorSet 0 + Decorate 520(block) Binding 1 + Decorate 521(si16) SpecId 100 + Decorate 522(su16) SpecId 101 2: TypeVoid 3: TypeFunction 2 14: TypeInt 16 1 @@ -168,28 +168,28 @@ spv.vulkan110.int16.frag 242: TypePointer Function 71(int) 264: 17(int) Constant 1 270: 17(int) Constant 2 - 275: TypeVector 27(int) 3 - 282: TypePointer Function 173(bool) - 284: 17(int) Constant 0 - 298: TypePointer Function 17(int) - 356: 52(ivec2) ConstantComposite 21 21 - 365: 193(ivec3) ConstantComposite 184 184 184 - 407: 173(bool) ConstantTrue - 414: 173(bool) ConstantFalse - 415: 174(bvec2) ConstantComposite 414 414 - 427: TypeVector 173(bool) 3 - 428: 427(bvec3) ConstantComposite 414 414 414 - 434: TypeVector 14(int) 4 - 435: TypePointer Function 434(ivec4) - 443: TypePointer Function 77(int) - 445: TypeVector 36(int) 4 - 446: TypePointer Function 445(ivec4) - 458: TypePointer Function 427(bvec3) - 520(Block): TypeStruct 14(int) 52(ivec2) 197(ivec3) 434(ivec4) 36(int) 57(ivec2) 193(ivec3) 445(ivec4) - 521: TypePointer Uniform 520(Block) - 522(block): 521(ptr) Variable Uniform - 523(si16): 14(int) SpecConstant 4294967286 - 524(su16): 36(int) SpecConstant 20 + 276: TypeVector 27(int) 3 + 280: TypePointer Function 173(bool) + 282: 17(int) Constant 0 + 296: TypePointer Function 17(int) + 354: 52(ivec2) ConstantComposite 21 21 + 363: 193(ivec3) ConstantComposite 184 184 184 + 405: 173(bool) ConstantTrue + 412: 173(bool) ConstantFalse + 413: 174(bvec2) ConstantComposite 412 412 + 425: TypeVector 173(bool) 3 + 426: 425(bvec3) ConstantComposite 412 412 412 + 432: TypeVector 14(int) 4 + 433: TypePointer Function 432(ivec4) + 441: TypePointer Function 77(int) + 443: TypeVector 36(int) 4 + 444: TypePointer Function 443(ivec4) + 456: TypePointer Function 425(bvec3) + 518(Block): TypeStruct 14(int) 52(ivec2) 197(ivec3) 432(ivec4) 36(int) 57(ivec2) 193(ivec3) 443(ivec4) + 519: TypePointer Uniform 518(Block) + 520(block): 519(ptr) Variable Uniform + 521(si16): 14(int) SpecConstant 4294967286 + 522(su16): 36(int) SpecConstant 20 4(main): 2 Function None 3 5: Label Return @@ -368,7 +368,7 @@ spv.vulkan110.int16.frag 220(i): 219(ptr) Variable Function 227(uv): 226(ptr) Variable Function 243(i64): 242(ptr) Variable Function - 283(b): 282(ptr) Variable Function + 281(b): 280(ptr) Variable Function 196: 193(ivec3) Load 195(u16v) 198: 197(ivec3) CompositeConstruct 179 179 179 199: 193(ivec3) IAdd 196 198 @@ -457,287 +457,285 @@ spv.vulkan110.int16.frag 273: 14(int) ShiftLeftLogical 269 272 Store 200(i16) 273 274: 193(ivec3) Load 195(u16v) - 276: 275(ivec3) UConvert 274 - 277: 275(ivec3) Bitcast 276 - 278: 27(int) Load 220(i) - 279: 275(ivec3) CompositeConstruct 278 278 278 - 280: 275(ivec3) ShiftLeftLogical 277 279 - 281: 225(ivec3) Bitcast 280 - Store 227(uv) 281 - 285: 37(ptr) AccessChain 195(u16v) 284 - 286: 36(int) Load 285 - 287: 14(int) Load 200(i16) - 288: 36(int) Bitcast 287 - 289: 173(bool) INotEqual 286 288 - Store 283(b) 289 - 290: 14(int) Load 200(i16) - 291: 36(int) Bitcast 290 - 292: 37(ptr) AccessChain 195(u16v) 284 - 293: 36(int) Load 292 - 294: 173(bool) IEqual 291 293 - Store 283(b) 294 - 295: 37(ptr) AccessChain 195(u16v) 284 - 296: 36(int) Load 295 - 297: 17(int) UConvert 296 - 299: 298(ptr) AccessChain 227(uv) 264 - 300: 17(int) Load 299 - 301: 173(bool) UGreaterThan 297 300 - Store 283(b) 301 - 302: 14(int) Load 200(i16) - 303: 27(int) SConvert 302 - 304: 27(int) Load 220(i) - 305: 173(bool) SLessThan 303 304 - Store 283(b) 305 - 306: 37(ptr) AccessChain 195(u16v) 264 - 307: 36(int) Load 306 - 308: 17(int) UConvert 307 - 309: 298(ptr) AccessChain 227(uv) 284 - 310: 17(int) Load 309 - 311: 173(bool) UGreaterThanEqual 308 310 - Store 283(b) 311 - 312: 14(int) Load 200(i16) - 313: 27(int) SConvert 312 - 314: 27(int) Load 220(i) - 315: 173(bool) SLessThanEqual 313 314 - Store 283(b) 315 - 316: 14(int) Load 200(i16) - 317: 27(int) SConvert 316 - 318: 17(int) Bitcast 317 - 319: 225(ivec3) Load 227(uv) - 320: 225(ivec3) CompositeConstruct 318 318 318 - 321: 225(ivec3) BitwiseOr 319 320 - Store 227(uv) 321 - 322: 14(int) Load 200(i16) - 323: 27(int) SConvert 322 - 324: 27(int) Load 220(i) - 325: 27(int) BitwiseOr 323 324 - Store 220(i) 325 - 326: 14(int) Load 200(i16) - 327: 71(int) SConvert 326 - 328: 71(int) Load 243(i64) - 329: 71(int) BitwiseAnd 328 327 - Store 243(i64) 329 - 330: 193(ivec3) Load 195(u16v) - 331: 225(ivec3) UConvert 330 - 332: 225(ivec3) Load 227(uv) - 333: 225(ivec3) BitwiseAnd 331 332 - Store 227(uv) 333 - 334: 14(int) Load 200(i16) - 335: 27(int) SConvert 334 - 336: 17(int) Bitcast 335 - 337: 225(ivec3) Load 227(uv) - 338: 225(ivec3) CompositeConstruct 336 336 336 - 339: 225(ivec3) BitwiseXor 337 338 - Store 227(uv) 339 - 340: 193(ivec3) Load 195(u16v) - 341: 14(int) Load 200(i16) - 342: 36(int) Bitcast 341 - 343: 193(ivec3) CompositeConstruct 342 342 342 - 344: 193(ivec3) BitwiseXor 340 343 - Store 195(u16v) 344 + 275: 27(int) Load 220(i) + 277: 276(ivec3) CompositeConstruct 275 275 275 + 278: 193(ivec3) ShiftLeftLogical 274 277 + 279: 225(ivec3) UConvert 278 + Store 227(uv) 279 + 283: 37(ptr) AccessChain 195(u16v) 282 + 284: 36(int) Load 283 + 285: 14(int) Load 200(i16) + 286: 36(int) Bitcast 285 + 287: 173(bool) INotEqual 284 286 + Store 281(b) 287 + 288: 14(int) Load 200(i16) + 289: 36(int) Bitcast 288 + 290: 37(ptr) AccessChain 195(u16v) 282 + 291: 36(int) Load 290 + 292: 173(bool) IEqual 289 291 + Store 281(b) 292 + 293: 37(ptr) AccessChain 195(u16v) 282 + 294: 36(int) Load 293 + 295: 17(int) UConvert 294 + 297: 296(ptr) AccessChain 227(uv) 264 + 298: 17(int) Load 297 + 299: 173(bool) UGreaterThan 295 298 + Store 281(b) 299 + 300: 14(int) Load 200(i16) + 301: 27(int) SConvert 300 + 302: 27(int) Load 220(i) + 303: 173(bool) SLessThan 301 302 + Store 281(b) 303 + 304: 37(ptr) AccessChain 195(u16v) 264 + 305: 36(int) Load 304 + 306: 17(int) UConvert 305 + 307: 296(ptr) AccessChain 227(uv) 282 + 308: 17(int) Load 307 + 309: 173(bool) UGreaterThanEqual 306 308 + Store 281(b) 309 + 310: 14(int) Load 200(i16) + 311: 27(int) SConvert 310 + 312: 27(int) Load 220(i) + 313: 173(bool) SLessThanEqual 311 312 + Store 281(b) 313 + 314: 14(int) Load 200(i16) + 315: 27(int) SConvert 314 + 316: 17(int) Bitcast 315 + 317: 225(ivec3) Load 227(uv) + 318: 225(ivec3) CompositeConstruct 316 316 316 + 319: 225(ivec3) BitwiseOr 317 318 + Store 227(uv) 319 + 320: 14(int) Load 200(i16) + 321: 27(int) SConvert 320 + 322: 27(int) Load 220(i) + 323: 27(int) BitwiseOr 321 322 + Store 220(i) 323 + 324: 14(int) Load 200(i16) + 325: 71(int) SConvert 324 + 326: 71(int) Load 243(i64) + 327: 71(int) BitwiseAnd 326 325 + Store 243(i64) 327 + 328: 193(ivec3) Load 195(u16v) + 329: 225(ivec3) UConvert 328 + 330: 225(ivec3) Load 227(uv) + 331: 225(ivec3) BitwiseAnd 329 330 + Store 227(uv) 331 + 332: 14(int) Load 200(i16) + 333: 27(int) SConvert 332 + 334: 17(int) Bitcast 333 + 335: 225(ivec3) Load 227(uv) + 336: 225(ivec3) CompositeConstruct 334 334 334 + 337: 225(ivec3) BitwiseXor 335 336 + Store 227(uv) 337 + 338: 193(ivec3) Load 195(u16v) + 339: 14(int) Load 200(i16) + 340: 36(int) Bitcast 339 + 341: 193(ivec3) CompositeConstruct 340 340 340 + 342: 193(ivec3) BitwiseXor 338 341 + Store 195(u16v) 342 Return FunctionEnd 12(builtinFuncs(): 2 Function None 3 13: Label - 345(i16v): 53(ptr) Variable Function - 348(i16): 15(ptr) Variable Function - 358(u16v): 194(ptr) Variable Function - 360(u16): 37(ptr) Variable Function - 430(i32): 219(ptr) Variable Function - 433(i64): 242(ptr) Variable Function - 436(i16v4): 435(ptr) Variable Function - 439(u32): 298(ptr) Variable Function - 440(u16v2): 58(ptr) Variable Function - 444(u64): 443(ptr) Variable Function - 447(u16v4): 446(ptr) Variable Function - 459(bv): 458(ptr) Variable Function - 346: 52(ivec2) Load 345(i16v) - 347: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 346 - Store 345(i16v) 347 - 349: 14(int) Load 348(i16) - 350: 14(int) ExtInst 1(GLSL.std.450) 7(SSign) 349 - Store 348(i16) 350 - 351: 52(ivec2) Load 345(i16v) - 352: 14(int) Load 348(i16) - 353: 52(ivec2) CompositeConstruct 352 352 - 354: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 351 353 - Store 345(i16v) 354 - 355: 52(ivec2) Load 345(i16v) - 357: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 355 356 - Store 345(i16v) 357 - 359: 193(ivec3) Load 358(u16v) - 361: 36(int) Load 360(u16) - 362: 193(ivec3) CompositeConstruct 361 361 361 - 363: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 359 362 - Store 358(u16v) 363 - 364: 193(ivec3) Load 358(u16v) - 366: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 364 365 - Store 358(u16v) 366 - 367: 52(ivec2) Load 345(i16v) - 368: 14(int) Load 348(i16) - 369: 52(ivec2) CompositeConstruct 368 368 - 370: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 367 369 - Store 345(i16v) 370 - 371: 52(ivec2) Load 345(i16v) - 372: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 371 356 - Store 345(i16v) 372 - 373: 193(ivec3) Load 358(u16v) - 374: 36(int) Load 360(u16) - 375: 193(ivec3) CompositeConstruct 374 374 374 - 376: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 373 375 - Store 358(u16v) 376 - 377: 193(ivec3) Load 358(u16v) - 378: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 377 365 - Store 358(u16v) 378 - 379: 52(ivec2) Load 345(i16v) - 380: 14(int) Load 348(i16) - 381: 14(int) SNegate 380 - 382: 14(int) Load 348(i16) - 383: 52(ivec2) CompositeConstruct 381 381 - 384: 52(ivec2) CompositeConstruct 382 382 - 385: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 379 383 384 - Store 345(i16v) 385 - 386: 52(ivec2) Load 345(i16v) - 387: 52(ivec2) Load 345(i16v) - 388: 52(ivec2) SNegate 387 - 389: 52(ivec2) Load 345(i16v) - 390: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 386 388 389 - Store 345(i16v) 390 - 391: 193(ivec3) Load 358(u16v) - 392: 36(int) Load 360(u16) - 393: 36(int) SNegate 392 - 394: 36(int) Load 360(u16) - 395: 193(ivec3) CompositeConstruct 393 393 393 - 396: 193(ivec3) CompositeConstruct 394 394 394 - 397: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 391 395 396 - Store 358(u16v) 397 - 398: 193(ivec3) Load 358(u16v) - 399: 193(ivec3) Load 358(u16v) - 400: 193(ivec3) SNegate 399 - 401: 193(ivec3) Load 358(u16v) - 402: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 398 400 401 - Store 358(u16v) 402 - 403: 15(ptr) AccessChain 345(i16v) 284 + 343(i16v): 53(ptr) Variable Function + 346(i16): 15(ptr) Variable Function + 356(u16v): 194(ptr) Variable Function + 358(u16): 37(ptr) Variable Function + 428(i32): 219(ptr) Variable Function + 431(i64): 242(ptr) Variable Function + 434(i16v4): 433(ptr) Variable Function + 437(u32): 296(ptr) Variable Function + 438(u16v2): 58(ptr) Variable Function + 442(u64): 441(ptr) Variable Function + 445(u16v4): 444(ptr) Variable Function + 457(bv): 456(ptr) Variable Function + 344: 52(ivec2) Load 343(i16v) + 345: 52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 344 + Store 343(i16v) 345 + 347: 14(int) Load 346(i16) + 348: 14(int) ExtInst 1(GLSL.std.450) 7(SSign) 347 + Store 346(i16) 348 + 349: 52(ivec2) Load 343(i16v) + 350: 14(int) Load 346(i16) + 351: 52(ivec2) CompositeConstruct 350 350 + 352: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 349 351 + Store 343(i16v) 352 + 353: 52(ivec2) Load 343(i16v) + 355: 52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 353 354 + Store 343(i16v) 355 + 357: 193(ivec3) Load 356(u16v) + 359: 36(int) Load 358(u16) + 360: 193(ivec3) CompositeConstruct 359 359 359 + 361: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 357 360 + Store 356(u16v) 361 + 362: 193(ivec3) Load 356(u16v) + 364: 193(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 362 363 + Store 356(u16v) 364 + 365: 52(ivec2) Load 343(i16v) + 366: 14(int) Load 346(i16) + 367: 52(ivec2) CompositeConstruct 366 366 + 368: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 365 367 + Store 343(i16v) 368 + 369: 52(ivec2) Load 343(i16v) + 370: 52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 369 354 + Store 343(i16v) 370 + 371: 193(ivec3) Load 356(u16v) + 372: 36(int) Load 358(u16) + 373: 193(ivec3) CompositeConstruct 372 372 372 + 374: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 371 373 + Store 356(u16v) 374 + 375: 193(ivec3) Load 356(u16v) + 376: 193(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 375 363 + Store 356(u16v) 376 + 377: 52(ivec2) Load 343(i16v) + 378: 14(int) Load 346(i16) + 379: 14(int) SNegate 378 + 380: 14(int) Load 346(i16) + 381: 52(ivec2) CompositeConstruct 379 379 + 382: 52(ivec2) CompositeConstruct 380 380 + 383: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 377 381 382 + Store 343(i16v) 383 + 384: 52(ivec2) Load 343(i16v) + 385: 52(ivec2) Load 343(i16v) + 386: 52(ivec2) SNegate 385 + 387: 52(ivec2) Load 343(i16v) + 388: 52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 384 386 387 + Store 343(i16v) 388 + 389: 193(ivec3) Load 356(u16v) + 390: 36(int) Load 358(u16) + 391: 36(int) SNegate 390 + 392: 36(int) Load 358(u16) + 393: 193(ivec3) CompositeConstruct 391 391 391 + 394: 193(ivec3) CompositeConstruct 392 392 392 + 395: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 389 393 394 + Store 356(u16v) 395 + 396: 193(ivec3) Load 356(u16v) + 397: 193(ivec3) Load 356(u16v) + 398: 193(ivec3) SNegate 397 + 399: 193(ivec3) Load 356(u16v) + 400: 193(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 396 398 399 + Store 356(u16v) 400 + 401: 15(ptr) AccessChain 343(i16v) 282 + 402: 14(int) Load 401 + 403: 15(ptr) AccessChain 343(i16v) 264 404: 14(int) Load 403 - 405: 15(ptr) AccessChain 345(i16v) 264 - 406: 14(int) Load 405 - 408: 14(int) Select 407 406 404 - Store 348(i16) 408 - 409: 14(int) Load 348(i16) - 410: 52(ivec2) CompositeConstruct 409 409 - 411: 14(int) Load 348(i16) - 412: 14(int) SNegate 411 - 413: 52(ivec2) CompositeConstruct 412 412 - 416: 52(ivec2) Select 415 413 410 - Store 345(i16v) 416 - 417: 37(ptr) AccessChain 358(u16v) 284 + 406: 14(int) Select 405 404 402 + Store 346(i16) 406 + 407: 14(int) Load 346(i16) + 408: 52(ivec2) CompositeConstruct 407 407 + 409: 14(int) Load 346(i16) + 410: 14(int) SNegate 409 + 411: 52(ivec2) CompositeConstruct 410 410 + 414: 52(ivec2) Select 413 411 408 + Store 343(i16v) 414 + 415: 37(ptr) AccessChain 356(u16v) 282 + 416: 36(int) Load 415 + 417: 37(ptr) AccessChain 356(u16v) 264 418: 36(int) Load 417 - 419: 37(ptr) AccessChain 358(u16v) 264 - 420: 36(int) Load 419 - 421: 36(int) Select 407 420 418 - Store 360(u16) 421 - 422: 36(int) Load 360(u16) - 423: 193(ivec3) CompositeConstruct 422 422 422 - 424: 36(int) Load 360(u16) - 425: 36(int) SNegate 424 - 426: 193(ivec3) CompositeConstruct 425 425 425 - 429: 193(ivec3) Select 428 426 423 - Store 358(u16v) 429 - 431: 52(ivec2) Load 345(i16v) - 432: 27(int) Bitcast 431 - Store 430(i32) 432 - 437: 434(ivec4) Load 436(i16v4) - 438: 71(int) Bitcast 437 - Store 433(i64) 438 - 441: 57(ivec2) Load 440(u16v2) - 442: 17(int) Bitcast 441 - Store 439(u32) 442 - 448: 445(ivec4) Load 447(u16v4) - 449: 77(int) Bitcast 448 - Store 444(u64) 449 - 450: 27(int) Load 430(i32) - 451: 52(ivec2) Bitcast 450 - Store 345(i16v) 451 - 452: 71(int) Load 433(i64) - 453: 434(ivec4) Bitcast 452 - Store 436(i16v4) 453 - 454: 17(int) Load 439(u32) - 455: 57(ivec2) Bitcast 454 - Store 440(u16v2) 455 - 456: 77(int) Load 444(u64) - 457: 445(ivec4) Bitcast 456 - Store 447(u16v4) 457 - 460: 193(ivec3) Load 358(u16v) - 461: 36(int) Load 360(u16) - 462: 193(ivec3) CompositeConstruct 461 461 461 - 463: 427(bvec3) ULessThan 460 462 - Store 459(bv) 463 - 464: 52(ivec2) Load 345(i16v) - 465: 14(int) Load 348(i16) - 466: 52(ivec2) CompositeConstruct 465 465 - 467: 174(bvec2) SLessThan 464 466 - 468: 427(bvec3) Load 459(bv) - 469: 427(bvec3) VectorShuffle 468 467 3 4 2 - Store 459(bv) 469 - 470: 193(ivec3) Load 358(u16v) - 471: 36(int) Load 360(u16) - 472: 193(ivec3) CompositeConstruct 471 471 471 - 473: 427(bvec3) ULessThanEqual 470 472 - Store 459(bv) 473 - 474: 52(ivec2) Load 345(i16v) - 475: 14(int) Load 348(i16) - 476: 52(ivec2) CompositeConstruct 475 475 - 477: 174(bvec2) SLessThanEqual 474 476 - 478: 427(bvec3) Load 459(bv) - 479: 427(bvec3) VectorShuffle 478 477 3 4 2 - Store 459(bv) 479 - 480: 193(ivec3) Load 358(u16v) - 481: 36(int) Load 360(u16) - 482: 193(ivec3) CompositeConstruct 481 481 481 - 483: 427(bvec3) UGreaterThan 480 482 - Store 459(bv) 483 - 484: 52(ivec2) Load 345(i16v) - 485: 14(int) Load 348(i16) - 486: 52(ivec2) CompositeConstruct 485 485 - 487: 174(bvec2) SGreaterThan 484 486 - 488: 427(bvec3) Load 459(bv) - 489: 427(bvec3) VectorShuffle 488 487 3 4 2 - Store 459(bv) 489 - 490: 193(ivec3) Load 358(u16v) - 491: 36(int) Load 360(u16) - 492: 193(ivec3) CompositeConstruct 491 491 491 - 493: 427(bvec3) UGreaterThanEqual 490 492 - Store 459(bv) 493 - 494: 52(ivec2) Load 345(i16v) - 495: 14(int) Load 348(i16) - 496: 52(ivec2) CompositeConstruct 495 495 - 497: 174(bvec2) SGreaterThanEqual 494 496 - 498: 427(bvec3) Load 459(bv) - 499: 427(bvec3) VectorShuffle 498 497 3 4 2 - Store 459(bv) 499 - 500: 193(ivec3) Load 358(u16v) - 501: 36(int) Load 360(u16) - 502: 193(ivec3) CompositeConstruct 501 501 501 - 503: 427(bvec3) IEqual 500 502 - Store 459(bv) 503 - 504: 52(ivec2) Load 345(i16v) - 505: 14(int) Load 348(i16) - 506: 52(ivec2) CompositeConstruct 505 505 - 507: 174(bvec2) IEqual 504 506 - 508: 427(bvec3) Load 459(bv) - 509: 427(bvec3) VectorShuffle 508 507 3 4 2 - Store 459(bv) 509 - 510: 193(ivec3) Load 358(u16v) - 511: 36(int) Load 360(u16) - 512: 193(ivec3) CompositeConstruct 511 511 511 - 513: 427(bvec3) INotEqual 510 512 - Store 459(bv) 513 - 514: 52(ivec2) Load 345(i16v) - 515: 14(int) Load 348(i16) - 516: 52(ivec2) CompositeConstruct 515 515 - 517: 174(bvec2) INotEqual 514 516 - 518: 427(bvec3) Load 459(bv) - 519: 427(bvec3) VectorShuffle 518 517 3 4 2 - Store 459(bv) 519 + 419: 36(int) Select 405 418 416 + Store 358(u16) 419 + 420: 36(int) Load 358(u16) + 421: 193(ivec3) CompositeConstruct 420 420 420 + 422: 36(int) Load 358(u16) + 423: 36(int) SNegate 422 + 424: 193(ivec3) CompositeConstruct 423 423 423 + 427: 193(ivec3) Select 426 424 421 + Store 356(u16v) 427 + 429: 52(ivec2) Load 343(i16v) + 430: 27(int) Bitcast 429 + Store 428(i32) 430 + 435: 432(ivec4) Load 434(i16v4) + 436: 71(int) Bitcast 435 + Store 431(i64) 436 + 439: 57(ivec2) Load 438(u16v2) + 440: 17(int) Bitcast 439 + Store 437(u32) 440 + 446: 443(ivec4) Load 445(u16v4) + 447: 77(int) Bitcast 446 + Store 442(u64) 447 + 448: 27(int) Load 428(i32) + 449: 52(ivec2) Bitcast 448 + Store 343(i16v) 449 + 450: 71(int) Load 431(i64) + 451: 432(ivec4) Bitcast 450 + Store 434(i16v4) 451 + 452: 17(int) Load 437(u32) + 453: 57(ivec2) Bitcast 452 + Store 438(u16v2) 453 + 454: 77(int) Load 442(u64) + 455: 443(ivec4) Bitcast 454 + Store 445(u16v4) 455 + 458: 193(ivec3) Load 356(u16v) + 459: 36(int) Load 358(u16) + 460: 193(ivec3) CompositeConstruct 459 459 459 + 461: 425(bvec3) ULessThan 458 460 + Store 457(bv) 461 + 462: 52(ivec2) Load 343(i16v) + 463: 14(int) Load 346(i16) + 464: 52(ivec2) CompositeConstruct 463 463 + 465: 174(bvec2) SLessThan 462 464 + 466: 425(bvec3) Load 457(bv) + 467: 425(bvec3) VectorShuffle 466 465 3 4 2 + Store 457(bv) 467 + 468: 193(ivec3) Load 356(u16v) + 469: 36(int) Load 358(u16) + 470: 193(ivec3) CompositeConstruct 469 469 469 + 471: 425(bvec3) ULessThanEqual 468 470 + Store 457(bv) 471 + 472: 52(ivec2) Load 343(i16v) + 473: 14(int) Load 346(i16) + 474: 52(ivec2) CompositeConstruct 473 473 + 475: 174(bvec2) SLessThanEqual 472 474 + 476: 425(bvec3) Load 457(bv) + 477: 425(bvec3) VectorShuffle 476 475 3 4 2 + Store 457(bv) 477 + 478: 193(ivec3) Load 356(u16v) + 479: 36(int) Load 358(u16) + 480: 193(ivec3) CompositeConstruct 479 479 479 + 481: 425(bvec3) UGreaterThan 478 480 + Store 457(bv) 481 + 482: 52(ivec2) Load 343(i16v) + 483: 14(int) Load 346(i16) + 484: 52(ivec2) CompositeConstruct 483 483 + 485: 174(bvec2) SGreaterThan 482 484 + 486: 425(bvec3) Load 457(bv) + 487: 425(bvec3) VectorShuffle 486 485 3 4 2 + Store 457(bv) 487 + 488: 193(ivec3) Load 356(u16v) + 489: 36(int) Load 358(u16) + 490: 193(ivec3) CompositeConstruct 489 489 489 + 491: 425(bvec3) UGreaterThanEqual 488 490 + Store 457(bv) 491 + 492: 52(ivec2) Load 343(i16v) + 493: 14(int) Load 346(i16) + 494: 52(ivec2) CompositeConstruct 493 493 + 495: 174(bvec2) SGreaterThanEqual 492 494 + 496: 425(bvec3) Load 457(bv) + 497: 425(bvec3) VectorShuffle 496 495 3 4 2 + Store 457(bv) 497 + 498: 193(ivec3) Load 356(u16v) + 499: 36(int) Load 358(u16) + 500: 193(ivec3) CompositeConstruct 499 499 499 + 501: 425(bvec3) IEqual 498 500 + Store 457(bv) 501 + 502: 52(ivec2) Load 343(i16v) + 503: 14(int) Load 346(i16) + 504: 52(ivec2) CompositeConstruct 503 503 + 505: 174(bvec2) IEqual 502 504 + 506: 425(bvec3) Load 457(bv) + 507: 425(bvec3) VectorShuffle 506 505 3 4 2 + Store 457(bv) 507 + 508: 193(ivec3) Load 356(u16v) + 509: 36(int) Load 358(u16) + 510: 193(ivec3) CompositeConstruct 509 509 509 + 511: 425(bvec3) INotEqual 508 510 + Store 457(bv) 511 + 512: 52(ivec2) Load 343(i16v) + 513: 14(int) Load 346(i16) + 514: 52(ivec2) CompositeConstruct 513 513 + 515: 174(bvec2) INotEqual 512 514 + 516: 425(bvec3) Load 457(bv) + 517: 425(bvec3) VectorShuffle 516 515 3 4 2 + Store 457(bv) 517 Return FunctionEnd diff --git a/Test/spv.int64.frag b/Test/spv.int64.frag index bcbb24b3..8fda12b3 100644 --- a/Test/spv.int64.frag +++ b/Test/spv.int64.frag @@ -116,6 +116,8 @@ void operators() i64 = i64 % i; // Shift + u64v = u64v << i; + i64 = i64 >> uv.y; u64v <<= i; i64 >>= uv.y; diff --git a/Test/spv.rankShift.comp b/Test/spv.rankShift.comp new file mode 100644 index 00000000..1761ad1f --- /dev/null +++ b/Test/spv.rankShift.comp @@ -0,0 +1,15 @@ +#version 450 +#extension GL_ARB_gpu_shader_int64 : require + +layout(local_size_x = 54) in; + +layout(location=4) uniform int64_t arg0; +layout(location=5) uniform uint arg1; + +void main() +{ + uint64_t result = arg0 << arg1; + result = arg0 >> arg1; + result <<= arg1; + result >>= arg1; +} \ No newline at end of file diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 2415f6a4..83d188e1 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -744,9 +744,6 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no auto promoteTo = std::make_tuple(EbtNumTypes, EbtNumTypes); - TBasicType type0 = node0->getType().getBasicType(); - TBasicType type1 = node1->getType().getBasicType(); - switch (op) { // // List all the binary ops that can implicitly convert one operand to the other's type; @@ -776,10 +773,10 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no case EOpSequence: // used by ?: - if (type0 == type1) + if (node0->getBasicType() == node1->getBasicType()) return std::make_tuple(node0, node1); - promoteTo = getConversionDestinatonType(type0, type1, op); + promoteTo = getConversionDestinatonType(node0->getBasicType(), node1->getBasicType(), op); if (std::get<0>(promoteTo) == EbtNumTypes || std::get<1>(promoteTo) == EbtNumTypes) return std::make_tuple(nullptr, nullptr); @@ -794,23 +791,25 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no return std::make_tuple(node0, node1); break; - // Shifts can have mixed types as long as they are integer and of the same rank, - // without converting. + // There are no conversions needed for GLSL; the shift amount just needs to be an + // integer type, as does the base. + // HLSL can promote bools to ints to make this work. case EOpLeftShift: case EOpRightShift: - if (node0->getType() == node1->getType()) - return std::make_tuple(node0, node1); - - if (isTypeInt(type0) && isTypeInt(type1)) { - if (getTypeRank(type0) == getTypeRank(type1)) { + if (source == EShSourceHlsl) { + TBasicType node0BasicType = node0->getBasicType(); + if (node0BasicType == EbtBool) + node0BasicType = EbtInt; + if (node1->getBasicType() == EbtBool) + promoteTo = std::make_tuple(node0BasicType, EbtInt); + else + promoteTo = std::make_tuple(node0BasicType, node1->getBasicType()); + } else { + if (isTypeInt(node0->getBasicType()) && isTypeInt(node1->getBasicType())) return std::make_tuple(node0, node1); - } else { - promoteTo = getConversionDestinatonType(type0, type1, op); - if (std::get<0>(promoteTo) == EbtNumTypes || std::get<1>(promoteTo) == EbtNumTypes) - return std::make_tuple(nullptr, nullptr); - } - } else - return std::make_tuple(nullptr, nullptr); + else + return std::make_tuple(nullptr, nullptr); + } break; default: @@ -964,35 +963,24 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt if (type.getBasicType() == node->getType().getBasicType()) return node; - if (canImplicitlyPromote(node->getType().getBasicType(), type.getBasicType(), op)) + if (canImplicitlyPromote(node->getBasicType(), type.getBasicType(), op)) promoteTo = type.getBasicType(); else return nullptr; break; - // Shifts can have mixed types as long as they are integer and of the same rank, - // without converting. - // It's the left operand's type that determines the resulting type, so no issue - // with assign shift ops either. + // For GLSL, there are no conversions needed; the shift amount just needs to be an + // integer type, as do the base/result. + // HLSL can convert the shift from a bool to an int. case EOpLeftShiftAssign: case EOpRightShiftAssign: { - TBasicType type0 = type.getBasicType(); - TBasicType type1 = node->getType().getBasicType(); - - if (source == EShSourceHlsl && node->getType().getBasicType() == EbtBool) { - promoteTo = type0; - } else { - if (isTypeInt(type0) && isTypeInt(type1)) { - if (getTypeRank(type0) == getTypeRank(type1)) { - return node; - } else { - if (canImplicitlyPromote(type1, type0, op)) - promoteTo = type0; - else - return nullptr; - } - } else + if (source == EShSourceHlsl && node->getType().getBasicType() == EbtBool) + promoteTo = type.getBasicType(); + else { + if (isTypeInt(type.getBasicType()) && isTypeInt(node->getBasicType())) + return node; + else return nullptr; } break; @@ -1437,9 +1425,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float32) || extensionRequested(E_GL_KHX_shader_explicit_arithmetic_types_float64); - if(explicitTypesEnabled) - { - + if(explicitTypesEnabled) { // integral promotions if (isIntegralPromotion(from, to)) { return true; diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 20ef2d72..47e27d2f 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -416,6 +416,7 @@ INSTANTIATE_TEST_CASE_P( "spv.460.comp", "spv.atomic.comp", "spv.glFragColor.frag", + "spv.rankShift.comp", "spv.specConst.vert", "spv.OVR_multiview.vert", })), From f6480833654a689de8239f37c344ce0cc8e2f9ad Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Fri, 16 Mar 2018 13:15:48 +0000 Subject: [PATCH 12/21] Add tests for GL_NV_shader_noperspective_interpolation --- ...vShaderNoperspectiveInterpolation.frag.out | 38 +++++++++++++++++++ Test/nvShaderNoperspectiveInterpolation.frag | 15 ++++++++ gtests/AST.FromFile.cpp | 24 ++++++++++++ gtests/Spv.FromFile.cpp | 2 +- 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 Test/baseResults/nvShaderNoperspectiveInterpolation.frag.out create mode 100644 Test/nvShaderNoperspectiveInterpolation.frag diff --git a/Test/baseResults/nvShaderNoperspectiveInterpolation.frag.out b/Test/baseResults/nvShaderNoperspectiveInterpolation.frag.out new file mode 100644 index 00000000..ae004c64 --- /dev/null +++ b/Test/baseResults/nvShaderNoperspectiveInterpolation.frag.out @@ -0,0 +1,38 @@ +nvShaderNoperspectiveInterpolation.frag +ERROR: 0:5: 'noperspective' : Reserved word. +ERROR: 0:5: 'noperspective' : not supported for this version or the enabled extensions +ERROR: 2 compilation errors. No code generated. + + +Shader version: 300 +Requested GL_NV_shader_noperspective_interpolation +ERROR: node is still EOpNull! +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:14 Sequence +0:14 move second child to first child ( temp mediump 4-component vector of float) +0:14 'fragColor' ( out mediump 4-component vector of float) +0:14 'color' ( noperspective in mediump 4-component vector of float) +0:? Linker Objects +0:? 'bad' ( noperspective in mediump 4-component vector of float) +0:? 'color' ( noperspective in mediump 4-component vector of float) +0:? 'fragColor' ( out mediump 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 300 +Requested GL_NV_shader_noperspective_interpolation +ERROR: node is still EOpNull! +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:14 Sequence +0:14 move second child to first child ( temp mediump 4-component vector of float) +0:14 'fragColor' ( out mediump 4-component vector of float) +0:14 'color' ( noperspective in mediump 4-component vector of float) +0:? Linker Objects +0:? 'bad' ( noperspective in mediump 4-component vector of float) +0:? 'color' ( noperspective in mediump 4-component vector of float) +0:? 'fragColor' ( out mediump 4-component vector of float) + diff --git a/Test/nvShaderNoperspectiveInterpolation.frag b/Test/nvShaderNoperspectiveInterpolation.frag new file mode 100644 index 00000000..15c191d0 --- /dev/null +++ b/Test/nvShaderNoperspectiveInterpolation.frag @@ -0,0 +1,15 @@ +#version 300 es + +precision mediump float; + +noperspective in vec4 bad; // ERROR + +#extension GL_NV_shader_noperspective_interpolation : enable + +noperspective in vec4 color; + +out vec4 fragColor; + +void main() { + fragColor = color; +} \ No newline at end of file diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index 825e4dd2..fea75863 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -41,6 +41,10 @@ namespace { using CompileToAstTest = GlslangTest<::testing::TestWithParam>; +#ifdef NV_EXTENSIONS +using CompileToAstTestNV = GlslangTest<::testing::TestWithParam>; +#endif + TEST_P(CompileToAstTest, FromFile) { loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), @@ -48,6 +52,16 @@ TEST_P(CompileToAstTest, FromFile) Target::AST); } +#ifdef NV_EXTENSIONS +// Compiling GLSL to SPIR-V under OpenGL semantics (NV extensions enabled). +TEST_P(CompileToAstTestNV, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), + Source::GLSL, Semantics::OpenGL, glslang::EShTargetVulkan_1_0, + Target::AST); +} +#endif + // clang-format off INSTANTIATE_TEST_CASE_P( Glsl, CompileToAstTest, @@ -214,6 +228,16 @@ INSTANTIATE_TEST_CASE_P( })), FileNameAsCustomTestSuffix ); + +#ifdef NV_EXTENSIONS +INSTANTIATE_TEST_CASE_P( + Glsl, CompileToAstTestNV, + ::testing::ValuesIn(std::vector({ + "nvShaderNoperspectiveInterpolation.frag", + })), + FileNameAsCustomTestSuffix +); +#endif // clang-format on } // anonymous namespace diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 20ef2d72..54fa00a9 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -171,7 +171,7 @@ TEST_P(CompileVulkanToSpirvTestAMD, FromFile) #endif #ifdef NV_EXTENSIONS -// Compiling GLSL to SPIR-V under Vulkan semantics (AMD extensions enabled). +// Compiling GLSL to SPIR-V under Vulkan semantics (NV extensions enabled). // Expected to successfully generate SPIR-V. TEST_P(CompileVulkanToSpirvTestNV, FromFile) { From 0af69da12ede4ce588b7316be55fb095dfe2fb7d Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Fri, 16 Mar 2018 11:52:10 -0600 Subject: [PATCH 13/21] Bump patch version. --- glslang/Include/revision.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h index 4b565475..05060fd3 100644 --- a/glslang/Include/revision.h +++ b/glslang/Include/revision.h @@ -1,3 +1,3 @@ // This header is generated by the make-revision script. -#define GLSLANG_PATCH_LEVEL 2604 +#define GLSLANG_PATCH_LEVEL 2629 From 5d610ee1dce850ff3e3e40231ea4938f7bd32fe9 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Wed, 7 Mar 2018 18:05:55 -0700 Subject: [PATCH 14/21] Implement SPV_GOOGLE_hlsl_functionality1. Enabled via -fhlsl_functionality1 --- SPIRV/GlslangToSpv.cpp | 266 ++++++++++-------- SPIRV/SpvBuilder.cpp | 44 +++ SPIRV/SpvBuilder.h | 3 + SPIRV/doc.cpp | 23 ++ StandAlone/StandAlone.cpp | 21 +- ...hlsl.structbuffer.incdec.frag.hlslfun1.out | 125 ++++++++ Test/runtests | 7 + .../MachineIndependent/ParseContextBase.cpp | 3 +- glslang/MachineIndependent/ParseHelper.h | 2 +- glslang/MachineIndependent/ShaderLang.cpp | 3 + .../MachineIndependent/localintermediate.h | 15 +- glslang/MachineIndependent/reflection.cpp | 6 +- glslang/MachineIndependent/reflection.h | 2 +- glslang/Public/ShaderLang.h | 5 +- hlsl/hlslParseHelper.cpp | 25 +- hlsl/hlslParseHelper.h | 2 +- 16 files changed, 402 insertions(+), 150 deletions(-) create mode 100644 Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 11257f08..b0eff21a 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -126,6 +126,9 @@ public: void dumpSpv(std::vector& out); protected: + TGlslangToSpvTraverser(TGlslangToSpvTraverser&); + TGlslangToSpvTraverser& operator=(TGlslangToSpvTraverser&); + spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier); spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier); spv::BuiltIn TranslateBuiltInDecoration(glslang::TBuiltInVariable, bool memberDeclaration); @@ -153,7 +156,8 @@ protected: glslang::TLayoutPacking getExplicitLayout(const glslang::TType& type) const; int getArrayStride(const glslang::TType& arrayType, glslang::TLayoutPacking, glslang::TLayoutMatrix); int getMatrixStride(const glslang::TType& matrixType, glslang::TLayoutPacking, glslang::TLayoutMatrix); - void updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType, int& currentOffset, int& nextOffset, glslang::TLayoutPacking, glslang::TLayoutMatrix); + void updateMemberOffset(const glslang::TType& structType, const glslang::TType& memberType, int& currentOffset, + int& nextOffset, glslang::TLayoutPacking, glslang::TLayoutMatrix); void declareUseOfStructMember(const glslang::TTypeList& members, int glslangMember); bool isShaderEntryPoint(const glslang::TIntermAggregate* node); @@ -182,10 +186,6 @@ protected: spv::Id createMiscOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy); spv::Id createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId); spv::Id getSymbolId(const glslang::TIntermSymbol* node); - void addDecoration(spv::Id id, spv::Decoration dec); - void addDecoration(spv::Id id, spv::Decoration dec, unsigned value); - void addMemberDecoration(spv::Id id, int member, spv::Decoration dec); - void addMemberDecoration(spv::Id id, int member, spv::Decoration dec, unsigned value); spv::Id createSpvConstant(const glslang::TIntermTyped&); spv::Id createSpvConstantFromConstUnionArray(const glslang::TType& type, const glslang::TConstUnionArray&, int& nextConst, bool specConstant); bool isTrivialLeaf(const glslang::TIntermTyped* node); @@ -222,8 +222,10 @@ protected: std::unordered_set rValueParameters; // set of formal function parameters passed as rValues, rather than a pointer std::unordered_map functionMap; std::unordered_map structMap[glslang::ElpCount][glslang::ElmCount]; - std::unordered_map > memberRemapper; // for mapping glslang block indices to spv indices (e.g., due to hidden members) + // for mapping glslang block indices to spv indices (e.g., due to hidden members): + std::unordered_map > memberRemapper; std::stack breakForLoop; // false means break for switch + std::unordered_map counterOriginator; }; // @@ -1195,6 +1197,36 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) else builder.setAccessChainLValue(id); } + + // Process linkage-only nodes for any special additional interface work. + if (linkageOnly) { + if (glslangIntermediate->getHlslFunctionality1()) { + // Map implicit counter buffers to their originating buffers, which should have been + // seen by now, given earlier pruning of unused counters, and preservation of order + // of declaration. + if (symbol->getType().getQualifier().isUniformOrBuffer()) { + if (!glslangIntermediate->hasCounterBufferName(symbol->getName())) { + // Save possible originating buffers for counter buffers, keyed by + // making the potential counter-buffer name. + std::string keyName = symbol->getName().c_str(); + keyName = glslangIntermediate->addCounterBufferName(keyName); + counterOriginator[keyName] = symbol; + } else { + // Handle a counter buffer, by finding the saved originating buffer. + std::string keyName = symbol->getName().c_str(); + auto it = counterOriginator.find(keyName); + if (it != counterOriginator.end()) { + id = getSymbolId(it->second); + if (id != spv::NoResult) { + spv::Id counterId = getSymbolId(symbol); + if (counterId != spv::NoResult) + builder.addDecorationId(id, spv::DecorationHlslCounterBufferGOOGLE, counterId); + } + } + } + } + } + } } bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::TIntermBinary* node) @@ -2709,89 +2741,102 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, InheritQualifiers(memberQualifier, qualifier); // using -1 above to indicate a hidden member - if (member >= 0) { - builder.addMemberName(spvType, member, glslangMember.getFieldName().c_str()); - addMemberDecoration(spvType, member, TranslateLayoutDecoration(glslangMember, memberQualifier.layoutMatrix)); - addMemberDecoration(spvType, member, TranslatePrecisionDecoration(glslangMember)); - // Add interpolation and auxiliary storage decorations only to top-level members of Input and Output storage classes - if (type.getQualifier().storage == glslang::EvqVaryingIn || - type.getQualifier().storage == glslang::EvqVaryingOut) { - if (type.getBasicType() == glslang::EbtBlock || - glslangIntermediate->getSource() == glslang::EShSourceHlsl) { - addMemberDecoration(spvType, member, TranslateInterpolationDecoration(memberQualifier)); - addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(memberQualifier)); - } + if (member < 0) + continue; + + builder.addMemberName(spvType, member, glslangMember.getFieldName().c_str()); + builder.addMemberDecoration(spvType, member, + TranslateLayoutDecoration(glslangMember, memberQualifier.layoutMatrix)); + builder.addMemberDecoration(spvType, member, TranslatePrecisionDecoration(glslangMember)); + // Add interpolation and auxiliary storage decorations only to + // top-level members of Input and Output storage classes + if (type.getQualifier().storage == glslang::EvqVaryingIn || + type.getQualifier().storage == glslang::EvqVaryingOut) { + if (type.getBasicType() == glslang::EbtBlock || + glslangIntermediate->getSource() == glslang::EShSourceHlsl) { + builder.addMemberDecoration(spvType, member, TranslateInterpolationDecoration(memberQualifier)); + builder.addMemberDecoration(spvType, member, TranslateAuxiliaryStorageDecoration(memberQualifier)); } - addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier)); + } + builder.addMemberDecoration(spvType, member, TranslateInvariantDecoration(memberQualifier)); - if (type.getBasicType() == glslang::EbtBlock && - qualifier.storage == glslang::EvqBuffer) { - // Add memory decorations only to top-level members of shader storage block - std::vector memory; - TranslateMemoryDecoration(memberQualifier, memory); - for (unsigned int i = 0; i < memory.size(); ++i) - addMemberDecoration(spvType, member, memory[i]); - } + if (type.getBasicType() == glslang::EbtBlock && + qualifier.storage == glslang::EvqBuffer) { + // Add memory decorations only to top-level members of shader storage block + std::vector memory; + TranslateMemoryDecoration(memberQualifier, memory); + for (unsigned int i = 0; i < memory.size(); ++i) + builder.addMemberDecoration(spvType, member, memory[i]); + } - // Location assignment was already completed correctly by the front end, - // just track whether a member needs to be decorated. - // Ignore member locations if the container is an array, as that's - // ill-specified and decisions have been made to not allow this. - if (! type.isArray() && memberQualifier.hasLocation()) - builder.addMemberDecoration(spvType, member, spv::DecorationLocation, memberQualifier.layoutLocation); + // Location assignment was already completed correctly by the front end, + // just track whether a member needs to be decorated. + // Ignore member locations if the container is an array, as that's + // ill-specified and decisions have been made to not allow this. + if (! type.isArray() && memberQualifier.hasLocation()) + builder.addMemberDecoration(spvType, member, spv::DecorationLocation, memberQualifier.layoutLocation); - if (qualifier.hasLocation()) // track for upcoming inheritance - locationOffset += glslangIntermediate->computeTypeLocationSize( - glslangMember, glslangIntermediate->getStage()); + if (qualifier.hasLocation()) // track for upcoming inheritance + locationOffset += glslangIntermediate->computeTypeLocationSize( + glslangMember, glslangIntermediate->getStage()); - // component, XFB, others - if (glslangMember.getQualifier().hasComponent()) - builder.addMemberDecoration(spvType, member, spv::DecorationComponent, glslangMember.getQualifier().layoutComponent); - if (glslangMember.getQualifier().hasXfbOffset()) - builder.addMemberDecoration(spvType, member, spv::DecorationOffset, glslangMember.getQualifier().layoutXfbOffset); - else if (explicitLayout != glslang::ElpNone) { - // figure out what to do with offset, which is accumulating - int nextOffset; - updateMemberOffset(type, glslangMember, offset, nextOffset, explicitLayout, memberQualifier.layoutMatrix); - if (offset >= 0) - builder.addMemberDecoration(spvType, member, spv::DecorationOffset, offset); - offset = nextOffset; - } + // component, XFB, others + if (glslangMember.getQualifier().hasComponent()) + builder.addMemberDecoration(spvType, member, spv::DecorationComponent, + glslangMember.getQualifier().layoutComponent); + if (glslangMember.getQualifier().hasXfbOffset()) + builder.addMemberDecoration(spvType, member, spv::DecorationOffset, + glslangMember.getQualifier().layoutXfbOffset); + else if (explicitLayout != glslang::ElpNone) { + // figure out what to do with offset, which is accumulating + int nextOffset; + updateMemberOffset(type, glslangMember, offset, nextOffset, explicitLayout, memberQualifier.layoutMatrix); + if (offset >= 0) + builder.addMemberDecoration(spvType, member, spv::DecorationOffset, offset); + offset = nextOffset; + } - if (glslangMember.isMatrix() && explicitLayout != glslang::ElpNone) - builder.addMemberDecoration(spvType, member, spv::DecorationMatrixStride, getMatrixStride(glslangMember, explicitLayout, memberQualifier.layoutMatrix)); + if (glslangMember.isMatrix() && explicitLayout != glslang::ElpNone) + builder.addMemberDecoration(spvType, member, spv::DecorationMatrixStride, + getMatrixStride(glslangMember, explicitLayout, memberQualifier.layoutMatrix)); - // built-in variable decorations - spv::BuiltIn builtIn = TranslateBuiltInDecoration(glslangMember.getQualifier().builtIn, true); - if (builtIn != spv::BuiltInMax) - addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn); + // built-in variable decorations + spv::BuiltIn builtIn = TranslateBuiltInDecoration(glslangMember.getQualifier().builtIn, true); + if (builtIn != spv::BuiltInMax) + builder.addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn); #ifdef NV_EXTENSIONS - if (builtIn == spv::BuiltInLayer) { - // SPV_NV_viewport_array2 extension - if (glslangMember.getQualifier().layoutViewportRelative){ - addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationViewportRelativeNV); - builder.addCapability(spv::CapabilityShaderViewportMaskNV); - builder.addExtension(spv::E_SPV_NV_viewport_array2); - } - if (glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset != -2048){ - addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV, glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset); - builder.addCapability(spv::CapabilityShaderStereoViewNV); - builder.addExtension(spv::E_SPV_NV_stereo_view_rendering); - } + if (builtIn == spv::BuiltInLayer) { + // SPV_NV_viewport_array2 extension + if (glslangMember.getQualifier().layoutViewportRelative){ + builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationViewportRelativeNV); + builder.addCapability(spv::CapabilityShaderViewportMaskNV); + builder.addExtension(spv::E_SPV_NV_viewport_array2); } - if (glslangMember.getQualifier().layoutPassthrough) { - addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationPassthroughNV); - builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV); - builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough); + if (glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset != -2048){ + builder.addMemberDecoration(spvType, member, + (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV, + glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset); + builder.addCapability(spv::CapabilityShaderStereoViewNV); + builder.addExtension(spv::E_SPV_NV_stereo_view_rendering); } + } + if (glslangMember.getQualifier().layoutPassthrough) { + builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationPassthroughNV); + builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV); + builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough); + } #endif + if (glslangIntermediate->getHlslFunctionality1() && memberQualifier.semanticName != nullptr) { + builder.addExtension("SPV_GOOGLE_hlsl_functionality1"); + builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationHlslSemanticGOOGLE, + memberQualifier.semanticName); } } // Decorate the structure - addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix)); - addDecoration(spvType, TranslateBlockDecoration(type, glslangIntermediate->usingStorageBuffer())); + builder.addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix)); + builder.addDecoration(spvType, TranslateBlockDecoration(type, glslangIntermediate->usingStorageBuffer())); if (type.getQualifier().hasStream() && glslangIntermediate->isMultiStream()) { builder.addCapability(spv::CapabilityGeometryStreams); builder.addDecoration(spvType, spv::DecorationStream, type.getQualifier().layoutStream); @@ -4037,7 +4082,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv builder.promoteScalar(precision, left, right); spv::Id result = builder.createBinOp(binOp, typeId, left, right); - addDecoration(result, noContraction); + builder.addDecoration(result, noContraction); return builder.setPrecision(result, precision); } @@ -4107,7 +4152,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv if (binOp != spv::OpNop) { spv::Id result = builder.createBinOp(binOp, typeId, left, right); - addDecoration(result, noContraction); + builder.addDecoration(result, noContraction); return builder.setPrecision(result, precision); } @@ -4167,7 +4212,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Dec if (firstClass) { spv::Id result = builder.createBinOp(op, typeId, left, right); - addDecoration(result, noContraction); + builder.addDecoration(result, noContraction); return builder.setPrecision(result, precision); } @@ -4206,7 +4251,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Dec spv::Id leftVec = leftMat ? builder.createCompositeExtract( left, vecType, indexes) : smearVec; spv::Id rightVec = rightMat ? builder.createCompositeExtract(right, vecType, indexes) : smearVec; spv::Id result = builder.createBinOp(op, vecType, leftVec, rightVec); - addDecoration(result, noContraction); + builder.addDecoration(result, noContraction); results.push_back(builder.setPrecision(result, precision)); } @@ -4611,7 +4656,7 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv: id = builder.createUnaryOp(unaryOp, typeId, operand); } - addDecoration(id, noContraction); + builder.addDecoration(id, noContraction); return builder.setPrecision(id, precision); } @@ -4638,7 +4683,7 @@ spv::Id TGlslangToSpvTraverser::createUnaryMatrixOperation(spv::Op op, spv::Deco indexes.push_back(c); spv::Id srcVec = builder.createCompositeExtract(operand, srcVecType, indexes); spv::Id destVec = builder.createUnaryOp(op, destVecType, srcVec); - addDecoration(destVec, noContraction); + builder.addDecoration(destVec, noContraction); results.push_back(builder.setPrecision(destVec, precision)); } @@ -6147,11 +6192,11 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol symbolValues[symbol->getId()] = id; if (symbol->getBasicType() != glslang::EbtBlock) { - addDecoration(id, TranslatePrecisionDecoration(symbol->getType())); - addDecoration(id, TranslateInterpolationDecoration(symbol->getType().getQualifier())); - addDecoration(id, TranslateAuxiliaryStorageDecoration(symbol->getType().getQualifier())); + builder.addDecoration(id, TranslatePrecisionDecoration(symbol->getType())); + builder.addDecoration(id, TranslateInterpolationDecoration(symbol->getType().getQualifier())); + builder.addDecoration(id, TranslateAuxiliaryStorageDecoration(symbol->getType().getQualifier())); if (symbol->getType().getQualifier().hasSpecConstantId()) - addDecoration(id, spv::DecorationSpecId, symbol->getType().getQualifier().layoutSpecConstantId); + builder.addDecoration(id, spv::DecorationSpecId, symbol->getType().getQualifier().layoutSpecConstantId); if (symbol->getQualifier().hasIndex()) builder.addDecoration(id, spv::DecorationIndex, symbol->getQualifier().layoutIndex); if (symbol->getQualifier().hasComponent()) @@ -6163,7 +6208,7 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol if (symbol->getQualifier().hasLocation()) builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation); - addDecoration(id, TranslateInvariantDecoration(symbol->getType().getQualifier())); + builder.addDecoration(id, TranslateInvariantDecoration(symbol->getType().getQualifier())); if (symbol->getQualifier().hasStream() && glslangIntermediate->isMultiStream()) { builder.addCapability(spv::CapabilityGeometryStreams); builder.addDecoration(id, spv::DecorationStream, symbol->getQualifier().layoutStream); @@ -6196,13 +6241,13 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol std::vector memory; TranslateMemoryDecoration(symbol->getType().getQualifier(), memory); for (unsigned int i = 0; i < memory.size(); ++i) - addDecoration(id, memory[i]); + builder.addDecoration(id, memory[i]); } // built-in variable decorations spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false); if (builtIn != spv::BuiltInMax) - addDecoration(id, spv::DecorationBuiltIn, (int)builtIn); + builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn); #ifdef NV_EXTENSIONS if (builtIn == spv::BuiltInSampleMask) { @@ -6212,7 +6257,7 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol decoration = (spv::Decoration)spv::DecorationOverrideCoverageNV; else decoration = (spv::Decoration)spv::DecorationMax; - addDecoration(id, decoration); + builder.addDecoration(id, decoration); if (decoration != spv::DecorationMax) { builder.addExtension(spv::E_SPV_NV_sample_mask_override_coverage); } @@ -6220,55 +6265,34 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol else if (builtIn == spv::BuiltInLayer) { // SPV_NV_viewport_array2 extension if (symbol->getQualifier().layoutViewportRelative) { - addDecoration(id, (spv::Decoration)spv::DecorationViewportRelativeNV); + builder.addDecoration(id, (spv::Decoration)spv::DecorationViewportRelativeNV); builder.addCapability(spv::CapabilityShaderViewportMaskNV); builder.addExtension(spv::E_SPV_NV_viewport_array2); } if (symbol->getQualifier().layoutSecondaryViewportRelativeOffset != -2048) { - addDecoration(id, (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV, symbol->getQualifier().layoutSecondaryViewportRelativeOffset); + builder.addDecoration(id, (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV, + symbol->getQualifier().layoutSecondaryViewportRelativeOffset); builder.addCapability(spv::CapabilityShaderStereoViewNV); builder.addExtension(spv::E_SPV_NV_stereo_view_rendering); } } if (symbol->getQualifier().layoutPassthrough) { - addDecoration(id, spv::DecorationPassthroughNV); + builder.addDecoration(id, spv::DecorationPassthroughNV); builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV); builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough); } #endif + if (glslangIntermediate->getHlslFunctionality1() && symbol->getType().getQualifier().semanticName != nullptr) { + builder.addExtension("SPV_GOOGLE_hlsl_functionality1"); + builder.addDecoration(id, (spv::Decoration)spv::DecorationHlslSemanticGOOGLE, + symbol->getType().getQualifier().semanticName); + } + return id; } -// If 'dec' is valid, add no-operand decoration to an object -void TGlslangToSpvTraverser::addDecoration(spv::Id id, spv::Decoration dec) -{ - if (dec != spv::DecorationMax) - builder.addDecoration(id, dec); -} - -// If 'dec' is valid, add a one-operand decoration to an object -void TGlslangToSpvTraverser::addDecoration(spv::Id id, spv::Decoration dec, unsigned value) -{ - if (dec != spv::DecorationMax) - builder.addDecoration(id, dec, value); -} - -// If 'dec' is valid, add a no-operand decoration to a struct member -void TGlslangToSpvTraverser::addMemberDecoration(spv::Id id, int member, spv::Decoration dec) -{ - if (dec != spv::DecorationMax) - builder.addMemberDecoration(id, (unsigned)member, dec); -} - -// If 'dec' is valid, add a one-operand decoration to a struct member -void TGlslangToSpvTraverser::addMemberDecoration(spv::Id id, int member, spv::Decoration dec, unsigned value) -{ - if (dec != spv::DecorationMax) - builder.addMemberDecoration(id, (unsigned)member, dec, value); -} - // Make a full tree of instructions to build a SPIR-V specialization constant, // or regular constant if possible. // @@ -6301,8 +6325,10 @@ spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TIntermTyped& n for (int dim = 0; dim < 3; ++dim) { bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet); dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst)); - if (specConst) - addDecoration(dimConstId.back(), spv::DecorationSpecId, glslangIntermediate->getLocalSizeSpecId(dim)); + if (specConst) { + builder.addDecoration(dimConstId.back(), spv::DecorationSpecId, + glslangIntermediate->getLocalSizeSpecId(dim)); + } } return builder.makeCompositeConstant(builder.makeVectorType(builder.makeUintType(32), 3), dimConstId, true); } diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 66330b05..6e78b799 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -1010,6 +1010,7 @@ void Builder::addDecoration(Id id, Decoration decoration, int num) { if (decoration == spv::DecorationMax) return; + Instruction* dec = new Instruction(OpDecorate); dec->addIdOperand(id); dec->addImmediateOperand(decoration); @@ -1019,8 +1020,37 @@ void Builder::addDecoration(Id id, Decoration decoration, int num) decorations.push_back(std::unique_ptr(dec)); } +void Builder::addDecoration(Id id, Decoration decoration, const char* s) +{ + if (decoration == spv::DecorationMax) + return; + + Instruction* dec = new Instruction(OpDecorateStringGOOGLE); + dec->addIdOperand(id); + dec->addImmediateOperand(decoration); + dec->addStringOperand(s); + + decorations.push_back(std::unique_ptr(dec)); +} + +void Builder::addDecorationId(Id id, Decoration decoration, Id idDecoration) +{ + if (decoration == spv::DecorationMax) + return; + + Instruction* dec = new Instruction(OpDecorateId); + dec->addIdOperand(id); + dec->addImmediateOperand(decoration); + dec->addIdOperand(idDecoration); + + decorations.push_back(std::unique_ptr(dec)); +} + void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, int num) { + if (decoration == spv::DecorationMax) + return; + Instruction* dec = new Instruction(OpMemberDecorate); dec->addIdOperand(id); dec->addImmediateOperand(member); @@ -1031,6 +1061,20 @@ void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decorat decorations.push_back(std::unique_ptr(dec)); } +void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const char *s) +{ + if (decoration == spv::DecorationMax) + return; + + Instruction* dec = new Instruction(OpMemberDecorateStringGOOGLE); + dec->addIdOperand(id); + dec->addImmediateOperand(member); + dec->addImmediateOperand(decoration); + dec->addStringOperand(s); + + decorations.push_back(std::unique_ptr(dec)); +} + // Comments in header Function* Builder::makeEntryPoint(const char* entryPoint) { diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index 25495fb7..dc76daec 100755 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -237,7 +237,10 @@ public: void addName(Id, const char* name); void addMemberName(Id, int member, const char* name); void addDecoration(Id, Decoration, int num = -1); + void addDecoration(Id, Decoration, const char*); + void addDecorationId(Id id, Decoration, Id idDecoration); void addMemberDecoration(Id, unsigned int member, Decoration, int num = -1); + void addMemberDecoration(Id, unsigned int member, Decoration, const char*); // At the end of what block do the next create*() instructions go? void setBuildPoint(Block* bp) { buildPoint = bp; } diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 61718734..bfe9f7a7 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -269,6 +269,9 @@ const char* DecorationString(int decoration) case 5252: return "ViewportRelativeNV"; case 5256: return "SecondaryViewportRelativeNV"; #endif + + case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE"; + case DecorationHlslSemanticGOOGLE: return "DecorationHlslSemanticGOOGLE"; } } @@ -1208,6 +1211,7 @@ const char* OpcodeString(int op) case 320: return "OpImageSparseRead"; case OpModuleProcessed: return "OpModuleProcessed"; + case OpDecorateId: return "OpDecorateId"; case 333: return "OpGroupNonUniformElect"; case 334: return "OpGroupNonUniformAll"; @@ -1265,6 +1269,9 @@ const char* OpcodeString(int op) case 5012: return "OpFragmentFetchAMD"; #endif + case OpDecorateStringGOOGLE: return "OpDecorateStringGOOGLE"; + case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE"; + case OpcodeCeiling: default: return "Bad"; @@ -1356,7 +1363,10 @@ void Parameterize() InstructionDesc[OpImageWrite].setResultAndType(false, false); InstructionDesc[OpDecorationGroup].setResultAndType(true, false); InstructionDesc[OpDecorate].setResultAndType(false, false); + InstructionDesc[OpDecorateId].setResultAndType(false, false); + InstructionDesc[OpDecorateStringGOOGLE].setResultAndType(false, false); InstructionDesc[OpMemberDecorate].setResultAndType(false, false); + InstructionDesc[OpMemberDecorateStringGOOGLE].setResultAndType(false, false); InstructionDesc[OpGroupDecorate].setResultAndType(false, false); InstructionDesc[OpGroupMemberDecorate].setResultAndType(false, false); InstructionDesc[OpName].setResultAndType(false, false); @@ -1921,11 +1931,24 @@ void Parameterize() InstructionDesc[OpDecorate].operands.push(OperandDecoration, ""); InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <>."); + InstructionDesc[OpDecorateId].operands.push(OperandId, "'Target'"); + InstructionDesc[OpDecorateId].operands.push(OperandDecoration, ""); + InstructionDesc[OpDecorateId].operands.push(OperandVariableIds, "See <>."); + + InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandId, "'Target'"); + InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandDecoration, ""); + InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandLiteralString, "'Literal String'"); + InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'"); InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'"); InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, ""); InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <>."); + InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandId, "'Structure Type'"); + InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralNumber, "'Member'"); + InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandDecoration, ""); + InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralString, "'Literal String'"); + InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'"); InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'"); diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index 8480ca67..280ca7b0 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -101,6 +101,7 @@ enum TOptions { EOptionInvertY = (1 << 30), EOptionDumpBareVersion = (1 << 31), }; +bool targetHlslFunctionality1 = false; // // Return codes from main/exit(). @@ -523,7 +524,7 @@ void ProcessArguments(std::vector>& workItem setOpenGlSpv(); OpenGLClientVersion = glslang::EShTargetOpenGL_450; } else - Error("--target-env expected vulkan1.0, opengl, or hlsl-16bit-types"); + Error("--target-env expected vulkan1.0, vulkan1.1, or opengl"); } bumpArg(); } else if (lowerword == "variable-name" || // synonyms @@ -613,6 +614,12 @@ void ProcessArguments(std::vector>& workItem Error("no provided for -e"); bumpArg(); break; + case 'f': + if (strcmp(&argv[0][2], "hlsl_functionality1") == 0) + targetHlslFunctionality1 = true; + else + Error("-f: expected hlsl_functionality1"); + break; case 'g': Options |= EOptionDebug; break; @@ -874,14 +881,15 @@ void CompileAndLinkShaderUnits(std::vector compUnits) : glslang::EShSourceGlsl, compUnit.stage, glslang::EShClientVulkan, ClientInputSemanticsVersion); shader->setEnvClient(glslang::EShClientVulkan, VulkanClientVersion); - shader->setEnvTarget(glslang::EShTargetSpv, TargetVersion); } else { shader->setEnvInput((Options & EOptionReadHlsl) ? glslang::EShSourceHlsl : glslang::EShSourceGlsl, compUnit.stage, glslang::EShClientOpenGL, ClientInputSemanticsVersion); shader->setEnvClient(glslang::EShClientOpenGL, OpenGLClientVersion); - shader->setEnvTarget(glslang::EshTargetSpv, TargetVersion); } + shader->setEnvTarget(glslang::EShTargetSpv, TargetVersion); + if (targetHlslFunctionality1) + shader->setEnvTargetHlslFunctionality1(); } shaders.push_back(shader); @@ -1318,6 +1326,9 @@ void usage() " -d default to desktop (#version 110) when there is no shader #version\n" " (default is ES version 100)\n" " -e specify as the entry-point name\n" + " -f{hlsl_functionality1}\n" + " 'hlsl_functionality1' enables use of the\n" + " SPV_GOOGLE_hlsl_functionality1 extension\n" " -g generate debug information\n" " -h print this usage message\n" " -i intermediate tree (glslang AST) is printed out\n" @@ -1390,8 +1401,8 @@ void usage() " set execution environment that emitted code\n" " will execute in (as opposed to the language\n" " semantics selected by --client) defaults:\n" - " 'vulkan1.0' under '--client vulkan'\n" - " 'opengl' under '--client opengl'\n" + " 'vulkan1.0' under '--client vulkan'\n" + " 'opengl' under '--client opengl'\n" " --variable-name Creates a C header file that contains a\n" " uint32_t array named \n" " initialized with the shader binary code.\n" diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out new file mode 100644 index 00000000..9e42ed34 --- /dev/null +++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out @@ -0,0 +1,125 @@ +hlsl.structbuffer.incdec.frag +// Module Version 10000 +// Generated by (magic number): 80006 +// Id's are bound by 70 + + Capability Shader + Extension "SPV_GOOGLE_hlsl_functionality1" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 63 66 + ExecutionMode 4 OriginUpperLeft + Source HLSL 500 + Name 4 "main" + Name 12 "@main(u1;" + Name 11 "pos" + Name 16 "result" + Name 20 "sbuf_rw_i" + MemberName 20(sbuf_rw_i) 0 "@data" + Name 22 "sbuf_rw_i" + Name 26 "sbuf_rw_d" + Name 27 "sbuf_rw_nocounter" + Name 33 "c1" + Name 34 "sbuf_rw_i@count" + MemberName 34(sbuf_rw_i@count) 0 "@count" + Name 36 "sbuf_rw_i@count" + Name 42 "c2" + Name 43 "sbuf_rw_d@count" + Name 61 "pos" + Name 63 "pos" + Name 66 "@entryPointOutput" + Name 67 "param" + Decorate 19 ArrayStride 16 + MemberDecorate 20(sbuf_rw_i) 0 Offset 0 + Decorate 20(sbuf_rw_i) BufferBlock + Decorate 22(sbuf_rw_i) DescriptorSet 0 + Decorate 26(sbuf_rw_d) DescriptorSet 0 + Decorate 27(sbuf_rw_nocounter) DescriptorSet 0 + MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0 + Decorate 34(sbuf_rw_i@count) BufferBlock + Decorate 36(sbuf_rw_i@count) DescriptorSet 0 + Decorate 43(sbuf_rw_d@count) DescriptorSet 0 + Decorate 63(pos) Flat + Decorate 63(pos) Location 0 + DecorateStringGOOGLE 63(pos) DecorationHlslSemanticGOOGLE "FOO" + Decorate 66(@entryPointOutput) Location 0 + DecorateStringGOOGLE 66(@entryPointOutput) DecorationHlslSemanticGOOGLE "SV_TARGET0" + DecorateId 22(sbuf_rw_i) DecorationHlslCounterBufferGOOGLE 36(sbuf_rw_i@count) + DecorateId 26(sbuf_rw_d) DecorationHlslCounterBufferGOOGLE 43(sbuf_rw_d@count) + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 8: TypeFloat 32 + 9: TypeVector 8(float) 4 + 10: TypeFunction 9(fvec4) 7(ptr) + 14: TypeVector 6(int) 4 + 15: TypePointer Function 14(ivec4) + 17: 6(int) Constant 0 + 18: 14(ivec4) ConstantComposite 17 17 17 17 + 19: TypeRuntimeArray 14(ivec4) + 20(sbuf_rw_i): TypeStruct 19 + 21: TypePointer Uniform 20(sbuf_rw_i) + 22(sbuf_rw_i): 21(ptr) Variable Uniform + 23: TypeInt 32 1 + 24: 23(int) Constant 0 + 25: 23(int) Constant 7 + 26(sbuf_rw_d): 21(ptr) Variable Uniform +27(sbuf_rw_nocounter): 21(ptr) Variable Uniform + 28: 23(int) Constant 5 + 29: 6(int) Constant 2 + 30: 14(ivec4) ConstantComposite 29 29 29 29 + 31: TypePointer Uniform 14(ivec4) +34(sbuf_rw_i@count): TypeStruct 23(int) + 35: TypePointer Uniform 34(sbuf_rw_i@count) +36(sbuf_rw_i@count): 35(ptr) Variable Uniform + 37: TypePointer Uniform 23(int) + 39: 23(int) Constant 1 + 40: 6(int) Constant 1 +43(sbuf_rw_d@count): 35(ptr) Variable Uniform + 45: 23(int) Constant 4294967295 + 62: TypePointer Input 6(int) + 63(pos): 62(ptr) Variable Input + 65: TypePointer Output 9(fvec4) +66(@entryPointOutput): 65(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 61(pos): 7(ptr) Variable Function + 67(param): 7(ptr) Variable Function + 64: 6(int) Load 63(pos) + Store 61(pos) 64 + 68: 6(int) Load 61(pos) + Store 67(param) 68 + 69: 9(fvec4) FunctionCall 12(@main(u1;) 67(param) + Store 66(@entryPointOutput) 69 + Return + FunctionEnd + 12(@main(u1;): 9(fvec4) Function None 10 + 11(pos): 7(ptr) FunctionParameter + 13: Label + 16(result): 15(ptr) Variable Function + 33(c1): 7(ptr) Variable Function + 42(c2): 7(ptr) Variable Function + Store 16(result) 18 + 32: 31(ptr) AccessChain 27(sbuf_rw_nocounter) 24 28 + Store 32 30 + 38: 37(ptr) AccessChain 36(sbuf_rw_i@count) 24 + 41: 6(int) AtomicIAdd 38 40 17 39 + Store 33(c1) 41 + 44: 37(ptr) AccessChain 43(sbuf_rw_d@count) 24 + 46: 6(int) AtomicIAdd 44 40 17 45 + 47: 6(int) IAdd 46 45 + Store 42(c2) 47 + 48: 7(ptr) AccessChain 16(result) 17 + 49: 6(int) Load 48 + 50: 8(float) ConvertUToF 49 + 51: 7(ptr) AccessChain 16(result) 40 + 52: 6(int) Load 51 + 53: 8(float) ConvertUToF 52 + 54: 6(int) Load 33(c1) + 55: 8(float) ConvertUToF 54 + 56: 6(int) Load 42(c2) + 57: 8(float) ConvertUToF 56 + 58: 9(fvec4) CompositeConstruct 50 53 55 57 + ReturnValue 58 + FunctionEnd diff --git a/Test/runtests b/Test/runtests index 98d74660..f8b4bc5b 100755 --- a/Test/runtests +++ b/Test/runtests @@ -201,6 +201,13 @@ diff -b $BASEDIR/hlsl.y-negate-2.vert.out $TARGETDIR/hlsl.y-negate-2.vert.out || $EXE -H -e main -V -D -Od -H -i --invert-y hlsl.y-negate-3.vert > $TARGETDIR/hlsl.y-negate-3.vert.out diff -b $BASEDIR/hlsl.y-negate-3.vert.out $TARGETDIR/hlsl.y-negate-3.vert.out || HASERROR=1 +# +# Testing hlsl_functionality1 +# +$EXE -H -e main -D -Od -fhlsl_functionality1 hlsl.structbuffer.incdec.frag > \ + $TARGETDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out +diff -b $BASEDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out $TARGETDIR/hlsl.structbuffer.incdec.frag.hlslfun1.out || HASERROR=1 + # # Final checking # diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp index bbc3cac0..525ed4e7 100644 --- a/glslang/MachineIndependent/ParseContextBase.cpp +++ b/glslang/MachineIndependent/ParseContextBase.cpp @@ -228,6 +228,7 @@ void TParseContextBase::rValueErrorCheck(const TSourceLoc& loc, const char* op, // must still be valid. // It is okay if the symbol's type will be subsequently edited; // the modifications will be tracked. +// Order is preserved, to avoid creating novel forward references. void TParseContextBase::trackLinkage(TSymbol& symbol) { if (!parsingBuiltins) @@ -602,7 +603,7 @@ void TParseContextBase::finish() if (parsingBuiltins) return; - // Transfer the linkage symbols to AST nodes + // Transfer the linkage symbols to AST nodes, preserving order. TIntermAggregate* linkage = new TIntermAggregate; for (auto i = linkageSymbols.begin(); i != linkageSymbols.end(); ++i) intermediate.addSymbolLinkageNode(linkage, **i); diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index c70afc24..4a0f03f5 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -187,7 +187,7 @@ protected: TParseContextBase& operator=(TParseContextBase&); const bool parsingBuiltins; // true if parsing built-in symbols/functions - TVector linkageSymbols; // these need to be transferred to 'linkage', after all editing is done + TVector linkageSymbols; // will be transferred to 'linkage', after all editing is done, order preserving TScanContext* scanContext; TPpContext* ppContext; TBuiltInResource resources; diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 44607523..4cab258b 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -768,6 +768,8 @@ bool ProcessDeferred( SpvVersion spvVersion; EShLanguage stage = compiler->getLanguage(); TranslateEnvironment(environment, messages, source, stage, spvVersion); + if (environment != nullptr && environment->target.hlslFunctionality1) + intermediate.setHlslFunctionality1(); // First, without using the preprocessor or parser, find the #version, so we know what // symbol tables, processing rules, etc. to set up. This does not need the extra strings @@ -1629,6 +1631,7 @@ TShader::TShader(EShLanguage s) environment.input.dialect = EShClientNone; environment.client.client = EShClientNone; environment.target.language = EShTargetNone; + environment.target.hlslFunctionality1 = false; } TShader::~TShader() diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 46650da4..d6ecbe34 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -210,7 +210,7 @@ class TVariable; class TIntermediate { public: explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) : - implicitThisName("@this"), + implicitThisName("@this"), implicitCounterName("@count"), language(l), source(EShSourceNone), profile(p), version(v), treeRoot(0), numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false), invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet), @@ -218,6 +218,7 @@ public: pixelCenterInteger(false), originUpperLeft(false), vertexSpacing(EvsNone), vertexOrder(EvoNone), pointMode(false), earlyFragmentTests(false), postDepthCoverage(false), depthLayout(EldNone), depthReplacing(false), + hlslFunctionality1(false), blendEquations(0), xfbMode(false), multiStream(false), #ifdef NV_EXTENSIONS layoutOverrideCoverage(false), @@ -362,6 +363,13 @@ public: } bool usingHlslIoMapping() { return hlslIoMapping; } + template T addCounterBufferName(const T& name) const { return name + implicitCounterName; } + bool hasCounterBufferName(const TString& name) const { + size_t len = strlen(implicitCounterName); + return name.size() > len && + name.compare(name.size() - len, len, implicitCounterName) == 0; + } + void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { textureSamplerTransformMode = mode; } void setVersion(int v) { version = v; } @@ -564,6 +572,9 @@ public: void setDepthReplacing() { depthReplacing = true; } bool isDepthReplacing() const { return depthReplacing; } + void setHlslFunctionality1() { hlslFunctionality1 = true; } + bool getHlslFunctionality1() const { return hlslFunctionality1; } + void addBlendEquation(TBlendEquationShift b) { blendEquations |= (1 << b); } unsigned int getBlendEquations() const { return blendEquations; } @@ -623,6 +634,7 @@ public: bool needsLegalization() const { return needToLegalize; } const char* const implicitThisName; + const char* const implicitCounterName; protected: TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&); @@ -682,6 +694,7 @@ protected: bool postDepthCoverage; TLayoutDepth depthLayout; bool depthReplacing; + bool hlslFunctionality1; int blendEquations; // an 'or'ing of masks of shifts of TBlendEquationShift bool xfbMode; bool multiStream; diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp index 62506313..4818b108 100644 --- a/glslang/MachineIndependent/reflection.cpp +++ b/glslang/MachineIndependent/reflection.cpp @@ -766,11 +766,11 @@ void TReflection::buildAttributeReflection(EShLanguage stage, const TIntermediat } // build counter block index associations for buffers -void TReflection::buildCounterIndices() +void TReflection::buildCounterIndices(const TIntermediate& intermediate) { // search for ones that have counters for (int i = 0; i < int(indexToUniformBlock.size()); ++i) { - const TString counterName(indexToUniformBlock[i].name + "@count"); + const TString counterName(intermediate.addCounterBufferName(indexToUniformBlock[i].name)); const int index = getIndex(counterName); if (index >= 0) @@ -802,7 +802,7 @@ bool TReflection::addStage(EShLanguage stage, const TIntermediate& intermediate) function->traverse(&it); } - buildCounterIndices(); + buildCounterIndices(intermediate); return true; } diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h index fedfbe8d..bf233e33 100644 --- a/glslang/MachineIndependent/reflection.h +++ b/glslang/MachineIndependent/reflection.h @@ -156,7 +156,7 @@ public: protected: friend class glslang::TReflectionTraverser; - void buildCounterIndices(); + void buildCounterIndices(const TIntermediate&); void buildAttributeReflection(EShLanguage, const TIntermediate&); // Need a TString hash: typedef std::unordered_map TNameToIndex; diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 3d87c0f2..6400ecf0 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -70,7 +70,7 @@ // This should always increase, as some paths to do not consume // a more major number. // It should increment by one when new functionality is added. -#define GLSLANG_MINOR_VERSION 4 +#define GLSLANG_MINOR_VERSION 5 // // Call before doing any other compiler/linker operations. @@ -154,6 +154,7 @@ struct TClient { struct TTarget { EShTargetLanguage language; EShTargetLanguageVersion version; // version to target, if SPIR-V, defined by "word 1" of the SPIR-V header + bool hlslFunctionality1; // can target hlsl_functionality1 extension(s) }; // All source/client/target versions and settings. @@ -420,6 +421,8 @@ public: environment.target.language = lang; environment.target.version = version; } + void setEnvTargetHlslFunctionality1() { environment.target.hlslFunctionality1 = true; } + bool getEnvTargetHlslFunctionality1() const { return environment.target.hlslFunctionality1; } // Interface to #include handlers. // diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index 09d20dfa..6fafbefa 100755 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -1608,7 +1608,7 @@ void HlslParseContext::addStructBufferHiddenCounterParam(const TSourceLoc& loc, if (! hasStructBuffCounter(*param.type)) return; - const TString counterBlockName(getStructBuffCounterName(*param.name)); + const TString counterBlockName(intermediate.addCounterBufferName(*param.name)); TType counterType; counterBufferType(loc, counterType); @@ -3163,7 +3163,7 @@ void HlslParseContext::counterBufferType(const TSourceLoc& loc, TType& type) { // Counter type TType* counterType = new TType(EbtInt, EvqBuffer); - counterType->setFieldName("@count"); + counterType->setFieldName(intermediate.implicitCounterName); TTypeList* blockStruct = new TTypeList; TTypeLoc member = { counterType, loc }; @@ -3176,12 +3176,6 @@ void HlslParseContext::counterBufferType(const TSourceLoc& loc, TType& type) shareStructBufferType(type); } -// knowledge of how to construct block name, in one place instead of N places. -TString HlslParseContext::getStructBuffCounterName(const TString& blockName) const -{ - return blockName + "@count"; -} - // declare counter for a structured buffer type void HlslParseContext::declareStructBufferCounter(const TSourceLoc& loc, const TType& bufferType, const TString& name) { @@ -3195,9 +3189,9 @@ void HlslParseContext::declareStructBufferCounter(const TSourceLoc& loc, const T TType blockType; counterBufferType(loc, blockType); - TString* blockName = new TString(getStructBuffCounterName(name)); + TString* blockName = new TString(intermediate.addCounterBufferName(name)); - // Counter buffer does not have its own counter buffer. TODO: there should be a better way to track this. + // Counter buffer is not yet in use structBufferCounter[*blockName] = false; shareStructBufferType(blockType); @@ -3211,7 +3205,7 @@ TIntermTyped* HlslParseContext::getStructBufferCounter(const TSourceLoc& loc, TI if (buffer == nullptr || ! isStructBufferType(buffer->getType())) return nullptr; - const TString counterBlockName(getStructBuffCounterName(buffer->getAsSymbolNode()->getName())); + const TString counterBlockName(intermediate.addCounterBufferName(buffer->getAsSymbolNode()->getName())); // Mark the counter as being used structBufferCounter[counterBlockName] = true; @@ -3224,7 +3218,6 @@ TIntermTyped* HlslParseContext::getStructBufferCounter(const TSourceLoc& loc, TI return counterMember; } - // // Decompose structure buffer methods into AST // @@ -5743,12 +5736,11 @@ void HlslParseContext::addStructBuffArguments(const TSourceLoc& loc, TIntermAggr TType counterType; counterBufferType(loc, counterType); - const TString counterBlockName(getStructBuffCounterName(blockSym->getName())); + const TString counterBlockName(intermediate.addCounterBufferName(blockSym->getName())); TVariable* variable = makeInternalVariable(counterBlockName, counterType); - // Mark this buffer as requiring a counter block. TODO: there should be a better - // way to track it. + // Mark this buffer's counter block as being in use structBufferCounter[counterBlockName] = true; TIntermSymbol* sym = intermediate.addSymbol(*variable, loc); @@ -9944,7 +9936,8 @@ void HlslParseContext::addPatchConstantInvocation() } // Finalization step: remove unused buffer blocks from linkage (we don't know until the -// shader is entirely compiled) +// shader is entirely compiled). +// Preserve order of remaining symbols. void HlslParseContext::removeUnusedStructBufferCounters() { const auto endIt = std::remove_if(linkageSymbols.begin(), linkageSymbols.end(), diff --git a/hlsl/hlslParseHelper.h b/hlsl/hlslParseHelper.h index d85bdfa2..c3efb5f5 100755 --- a/hlsl/hlslParseHelper.h +++ b/hlsl/hlslParseHelper.h @@ -405,7 +405,7 @@ protected: // may fit in TSampler::structReturnIndex. TVector textureReturnStruct; - TMap structBufferCounter; + TMap structBufferCounter; // true if counter buffer is in use // The built-in interstage IO map considers e.g, EvqPosition on input and output separately, so that we // can build the linkage correctly if position appears on both sides. Otherwise, multiple positions From e7e081bda9a4f4dfeb7fc96d9f222e58df209d63 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Mon, 19 Mar 2018 00:43:18 -0600 Subject: [PATCH 15/21] PP: don't give errors on some tokens under #if 0 (or similar). Fixes #1295. Tokens that are accepted by any version of HLSL or GLSL should be allowed when #ifdef'd off, such that errors are not reported. --- .../cppRelaxSkipTokensErrors.vert.out | 14 ++++ Test/cppBad.vert | 2 +- Test/cppRelaxSkipTokensErrors.vert | 14 ++++ .../preprocessor/PpScanner.cpp | 71 +++++++++++-------- gtests/AST.FromFile.cpp | 1 + 5 files changed, 71 insertions(+), 31 deletions(-) create mode 100755 Test/baseResults/cppRelaxSkipTokensErrors.vert.out create mode 100644 Test/cppRelaxSkipTokensErrors.vert diff --git a/Test/baseResults/cppRelaxSkipTokensErrors.vert.out b/Test/baseResults/cppRelaxSkipTokensErrors.vert.out new file mode 100755 index 00000000..e9b4b1b7 --- /dev/null +++ b/Test/baseResults/cppRelaxSkipTokensErrors.vert.out @@ -0,0 +1,14 @@ +cppRelaxSkipTokensErrors.vert +Shader version: 110 +0:? Sequence +0:? Linker Objects + + +Linked vertex stage: + +ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point + +Shader version: 110 +0:? Sequence +0:? Linker Objects + diff --git a/Test/cppBad.vert b/Test/cppBad.vert index 49600f91..0044c44f 100644 --- a/Test/cppBad.vert +++ b/Test/cppBad.vert @@ -1,5 +1,5 @@ #define m#0# #if m - +#endif #define n() int n" \ No newline at end of file diff --git a/Test/cppRelaxSkipTokensErrors.vert b/Test/cppRelaxSkipTokensErrors.vert new file mode 100644 index 00000000..b30af0c9 --- /dev/null +++ b/Test/cppRelaxSkipTokensErrors.vert @@ -0,0 +1,14 @@ +#version 110 + +#if 0 +3.5L +3.5h +2034h +1.#INF +0x1234567812345L +12323394203923879234L +0123s; +123s; +0123456712345671234L +"string" +#endif diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp index 61bf027f..f4eaf57d 100644 --- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp +++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp @@ -118,7 +118,7 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) ch = getChar(); // 1.#INF or -1.#INF - if (parseContext.intermediate.getSource() == EShSourceHlsl && ch == '#') { + if (ch == '#' && (ifdepth > 0 || parseContext.intermediate.getSource() == EShSourceHlsl)) { if ((len < 2) || (len == 2 && ppToken->name[0] != '1') || (len == 3 && ppToken->name[1] != '1' && !(ppToken->name[0] == '-' || ppToken->name[0] == '+')) || @@ -174,9 +174,9 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) // Suffix: bool isFloat16 = false; if (ch == 'l' || ch == 'L') { - if (parseContext.intermediate.getSource() == EShSourceGlsl) + if (ifdepth == 0 && parseContext.intermediate.getSource() == EShSourceGlsl) parseContext.doubleCheck(ppToken->loc, "double floating-point suffix"); - if (! HasDecimalOrExponent) + if (ifdepth == 0 && !HasDecimalOrExponent) parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", ""); if (parseContext.intermediate.getSource() == EShSourceGlsl) { int ch2 = getChar(); @@ -193,9 +193,9 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) isDouble = 1; } } else if (ch == 'h' || ch == 'H') { - if (parseContext.intermediate.getSource() == EShSourceGlsl) + if (ifdepth == 0 && parseContext.intermediate.getSource() == EShSourceGlsl) parseContext.float16Check(ppToken->loc, "half floating-point suffix"); - if (!HasDecimalOrExponent) + if (ifdepth == 0 && !HasDecimalOrExponent) parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", ""); if (parseContext.intermediate.getSource() == EShSourceGlsl) { int ch2 = getChar(); @@ -212,10 +212,11 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) isFloat16 = true; } } else if (ch == 'f' || ch == 'F') { - parseContext.profileRequires(ppToken->loc, EEsProfile, 300, nullptr, "floating-point suffix"); - if (! parseContext.relaxedErrors()) + if (ifdepth == 0) + parseContext.profileRequires(ppToken->loc, EEsProfile, 300, nullptr, "floating-point suffix"); + if (ifdepth == 0 && !parseContext.relaxedErrors()) parseContext.profileRequires(ppToken->loc, ~EEsProfile, 120, nullptr, "floating-point suffix"); - if (! HasDecimalOrExponent) + if (ifdepth == 0 && !HasDecimalOrExponent) parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", ""); saveName(ch); } else @@ -483,18 +484,22 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken) ppToken->name[len] = '\0'; if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) { - pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile, + if (pp->ifdepth == 0) { + pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile, "64-bit hexadecimal literal"); - pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, - Num_Int64_Extensions, Int64_Extensions, "64-bit hexadecimal literal"); + pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, + Num_Int64_Extensions, Int64_Extensions, "64-bit hexadecimal literal"); + } ppToken->i64val = ival; return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64; } else if (isInt16) { - if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) { - pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile, - "16-bit hexadecimal literal"); - pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, - Num_Int16_Extensions, Int16_Extensions, "16-bit hexadecimal literal"); + if (pp->ifdepth == 0) { + if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) { + pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile, + "16-bit hexadecimal literal"); + pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, + Num_Int16_Extensions, Int16_Extensions, "16-bit hexadecimal literal"); + } } ppToken->ival = (int)ival; return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16; @@ -595,18 +600,22 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken) pp->parseContext.ppError(ppToken->loc, "octal literal too big", "", ""); if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) { - pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile, + if (pp->ifdepth == 0) { + pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile, "64-bit octal literal"); - pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, - Num_Int64_Extensions, Int64_Extensions, "64-bit octal literal"); + pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, + Num_Int64_Extensions, Int64_Extensions, "64-bit octal literal"); + } ppToken->i64val = ival; return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64; } else if (isInt16) { - if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) { - pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile, - "16-bit octal literal"); - pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, - Num_Int16_Extensions, Int16_Extensions, "16-bit octal literal"); + if (pp->ifdepth == 0) { + if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) { + pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile, + "16-bit octal literal"); + pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, + Num_Int16_Extensions, Int16_Extensions, "16-bit octal literal"); + } } ppToken->ival = (int)ival; return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16; @@ -700,16 +709,18 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken) } if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) { - pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile, + if (pp->ifdepth == 0) { + pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile, "64-bit literal"); - pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, - Num_Int64_Extensions, Int64_Extensions, "64-bit literal"); + pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, + Num_Int64_Extensions, Int64_Extensions, "64-bit literal"); + } ppToken->i64val = ival; return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64; } else if (isInt16) { - if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) { + if (pp->ifdepth == 0 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) { pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile, - "16-bit literal"); + "16-bit literal"); pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0, Num_Int16_Extensions, Int16_Extensions, "16-bit literal"); } @@ -972,7 +983,7 @@ int TPpContext::tokenize(TPpToken& ppToken) continue; break; case PpAtomConstString: - if (parseContext.intermediate.getSource() != EShSourceHlsl) { + if (ifdepth == 0 && parseContext.intermediate.getSource() != EShSourceHlsl) { // HLSL allows string literals. parseContext.ppError(ppToken.loc, "string literals not supported", "\"\"", ""); continue; diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index fea75863..061c86c3 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -99,6 +99,7 @@ INSTANTIATE_TEST_CASE_P( "cppComplexExpr.vert", "cppDeepNest.frag", "cppPassMacroName.frag", + "cppRelaxSkipTokensErrors.vert", "badChars.frag", "pointCoord.frag", "array.frag", From 95b1334aa28d7dd205ba42acdbe5aa323717e5ee Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Mon, 19 Mar 2018 01:11:04 -0600 Subject: [PATCH 16/21] Bump patch version. --- glslang/Include/revision.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h index 05060fd3..0a3b2917 100644 --- a/glslang/Include/revision.h +++ b/glslang/Include/revision.h @@ -1,3 +1,3 @@ // This header is generated by the make-revision script. -#define GLSLANG_PATCH_LEVEL 2629 +#define GLSLANG_PATCH_LEVEL 2637 From b126550b1a096f69280136c3e65da0459f703bbb Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Wed, 21 Mar 2018 15:27:38 +0800 Subject: [PATCH 17/21] Add additional error check for fragment shader outputs Int64 and uint64 are disallowed as fragment shader outputs, similar to double. --- glslang/MachineIndependent/ParseHelper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index f189558c..5ced1b0b 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2778,8 +2778,8 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali error(loc, "can't use auxiliary qualifier on a fragment output", "centroid/sample/patch", ""); if (qualifier.isInterpolation()) error(loc, "can't use interpolation qualifier on a fragment output", "flat/smooth/noperspective", ""); - if (publicType.basicType == EbtDouble) - error(loc, "cannot contain a double", GetStorageQualifierString(qualifier.storage), ""); + if (publicType.basicType == EbtDouble || publicType.basicType == EbtInt64 || publicType.basicType == EbtUint64) + error(loc, "cannot contain a double, int64, or uint64", GetStorageQualifierString(qualifier.storage), ""); break; case EShLangCompute: From 1fe4a44759903aeb4a4e4cfc94c3e82961714e76 Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Mon, 19 Mar 2018 20:05:40 +0100 Subject: [PATCH 18/21] Add locations to opaque types for OpenGL --- Test/baseResults/spv.debugInfo.1.1.frag.out | 1 + Test/baseResults/spv.debugInfo.frag.out | 1 + glslang/MachineIndependent/iomapper.cpp | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Test/baseResults/spv.debugInfo.1.1.frag.out b/Test/baseResults/spv.debugInfo.1.1.frag.out index b7303762..9bd14910 100644 --- a/Test/baseResults/spv.debugInfo.1.1.frag.out +++ b/Test/baseResults/spv.debugInfo.1.1.frag.out @@ -94,6 +94,7 @@ void main() MemberDecorate 54(ubuf) 0 Offset 0 Decorate 54(ubuf) Block Decorate 56 DescriptorSet 3 + Decorate 69(s2d) Location 0 Decorate 69(s2d) DescriptorSet 3 3: TypeVoid 4: TypeFunction 3 diff --git a/Test/baseResults/spv.debugInfo.frag.out b/Test/baseResults/spv.debugInfo.frag.out index de544151..0bb266bd 100644 --- a/Test/baseResults/spv.debugInfo.frag.out +++ b/Test/baseResults/spv.debugInfo.frag.out @@ -97,6 +97,7 @@ void main() Decorate 54(ubuf) Block Decorate 56 DescriptorSet 3 Decorate 56 Binding 0 + Decorate 69(s2d) Location 0 Decorate 69(s2d) DescriptorSet 3 Decorate 69(s2d) Binding 1 3: TypeVoid diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index a7deb9d5..619d9187 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -431,7 +431,8 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver // no locations added if already present, a built-in variable, a block, or an opaque if (type.getQualifier().hasLocation() || type.isBuiltIn() || - type.getBasicType() == EbtBlock || type.containsOpaque()) + type.getBasicType() == EbtBlock || + (type.containsOpaque() && intermediate.getSpv().openGl == 0)) return -1; // no locations on blocks of built-in variables From 2d539049996678c2503449ae5ea313d019cd52e1 Mon Sep 17 00:00:00 2001 From: Neil Roberts Date: Mon, 19 Mar 2018 23:28:19 +0100 Subject: [PATCH 19/21] Take into account the number of locations taken up by a uniform When assigning uniform locations it now takes into account the number of locations occupied by the type. For uniforms, all types except arrays and structs take up one location. For arrays the base location count is multiplied by the array dimensions and for structs it is the sum of the locations of each member. --- glslang/MachineIndependent/iomapper.cpp | 6 +++- glslang/MachineIndependent/linkValidate.cpp | 30 +++++++++++++++++++ .../MachineIndependent/localintermediate.h | 1 + 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index 619d9187..68172538 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -443,7 +443,11 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver return -1; } - return nextUniformLocation++; + int location = nextUniformLocation; + + nextUniformLocation += TIntermediate::computeTypeUniformLocationSize(type); + + return location; } bool validateInOut(EShLanguage /*stage*/, const char* /*name*/, const TType& /*type*/, bool /*is_live*/) override { diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 9aba2792..aa9c5121 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -962,6 +962,36 @@ int TIntermediate::computeTypeLocationSize(const TType& type, EShLanguage stage) return 1; } +// Same as computeTypeLocationSize but for uniforms +int TIntermediate::computeTypeUniformLocationSize(const TType& type) +{ + // "Individual elements of a uniform array are assigned + // consecutive locations with the first element taking location + // location." + if (type.isArray()) { + // TODO: perf: this can be flattened by using getCumulativeArraySize(), and a deref that discards all arrayness + TType elementType(type, 0); + if (type.isImplicitlySizedArray()) { + // TODO: are there valid cases of having an implicitly-sized array with a location? If so, running this code too early. + return computeTypeUniformLocationSize(elementType); + } else + return type.getOuterArraySize() * computeTypeUniformLocationSize(elementType); + } + + // "Each subsequent inner-most member or element gets incremental + // locations for the entire structure or array." + if (type.isStruct()) { + int size = 0; + for (int member = 0; member < (int)type.getStruct()->size(); ++member) { + TType memberType(type, member); + size += computeTypeUniformLocationSize(memberType); + } + return size; + } + + return 1; +} + // Accumulate xfb buffer ranges and check for collisions as the accumulation is done. // // Returns < 0 if no collision, >= 0 if collision and the value returned is a colliding value. diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index d6ecbe34..d6f13ae4 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -590,6 +590,7 @@ public: int addUsedOffsets(int binding, int offset, int numOffsets); bool addUsedConstantId(int id); static int computeTypeLocationSize(const TType&, EShLanguage); + static int computeTypeUniformLocationSize(const TType&); bool setXfbBufferStride(int buffer, unsigned stride) { From 97e35420a62e112de57a31b265e020662883ef8f Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Thu, 22 Mar 2018 23:44:11 -0600 Subject: [PATCH 20/21] Non-functional: always return value from makeFpConstant(). Should fix #1308. --- SPIRV/SpvBuilder.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 6e78b799..dfeae871 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -859,12 +859,14 @@ Id Builder::makeFpConstant(Id type, double d, bool specConstant) return makeFloatConstant(d, specConstant); case 64: return makeDoubleConstant(d, specConstant); + default: + break; } assert(false); + return NoResult; } - Id Builder::findCompositeConstant(Op typeClass, const std::vector& comps) { Instruction* constant = 0; From 7cec64fc42eba4587d2f3d73c03cb68ceb18dca4 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Thu, 22 Mar 2018 23:54:04 -0600 Subject: [PATCH 21/21] Non functional: add EshTargetClientVersion alias for EShTargetClientVersion. Fixes #1304. --- StandAlone/StandAlone.cpp | 4 ++-- glslang/Public/ShaderLang.h | 8 +++++--- gtests/TestFixture.h | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index 280ca7b0..356e016e 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -160,9 +160,9 @@ const char* variableName = nullptr; bool HlslEnable16BitTypes = false; std::vector IncludeDirectoryList; int ClientInputSemanticsVersion = 100; // maps to, say, #define VULKAN 100 -glslang::EshTargetClientVersion VulkanClientVersion = +glslang::EShTargetClientVersion VulkanClientVersion = glslang::EShTargetVulkan_1_0; // would map to, say, Vulkan 1.0 -glslang::EshTargetClientVersion OpenGLClientVersion = +glslang::EShTargetClientVersion OpenGLClientVersion = glslang::EShTargetOpenGL_450; // doesn't influence anything yet, but maps to OpenGL 4.50 glslang::EShTargetLanguageVersion TargetVersion = glslang::EShTargetSpv_1_0; // maps to, say, SPIR-V 1.0 diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 6400ecf0..ef6c0745 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -132,7 +132,9 @@ typedef enum { EShTargetVulkan_1_0 = (1 << 22), EShTargetVulkan_1_1 = (1 << 22) | (1 << 12), EShTargetOpenGL_450 = 450, -} EshTargetClientVersion; +} EShTargetClientVersion; + +typedef EShTargetClientVersion EshTargetClientVersion; typedef enum { EShTargetSpv_1_0 = (1 << 16), @@ -148,7 +150,7 @@ struct TInputLanguage { struct TClient { EShClient client; - EshTargetClientVersion version; // version of client itself (not the client's input dialect) + EShTargetClientVersion version; // version of client itself (not the client's input dialect) }; struct TTarget { @@ -411,7 +413,7 @@ public: environment.input.dialect = client; environment.input.dialectVersion = version; } - void setEnvClient(EShClient client, EshTargetClientVersion version) + void setEnvClient(EShClient client, EShTargetClientVersion version) { environment.client.client = client; environment.client.version = version; diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h index 5af96d97..0e984d4e 100644 --- a/gtests/TestFixture.h +++ b/gtests/TestFixture.h @@ -197,7 +197,7 @@ public: GlslangResult compileAndLink( const std::string shaderName, const std::string& code, const std::string& entryPointName, EShMessages controls, - glslang::EshTargetClientVersion clientTargetVersion, + glslang::EShTargetClientVersion clientTargetVersion, bool flattenUniformArrays = false, EShTextureSamplerTransformMode texSampTransMode = EShTexSampTransKeep, bool disableOptimizer = true, @@ -407,7 +407,7 @@ public: const std::string& testName, Source source, Semantics semantics, - glslang::EshTargetClientVersion clientTargetVersion, + glslang::EShTargetClientVersion clientTargetVersion, Target target, bool automap = true, const std::string& entryPointName="",