From 2b2316d3fabd2a5f63856330d218e8183c1fe683 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Sun, 17 Feb 2019 22:49:28 -0600 Subject: [PATCH 01/42] Add Float16/Int8/Int16 capabilities for private variables and function parameters --- SPIRV/GlslangToSpv.cpp | 17 +++++ .../spv.functionParameterTypes.frag.out | 62 +++++++++++++++++++ .../spv.privateVariableTypes.frag.out | 54 ++++++++++++++++ Test/spv.functionParameterTypes.frag | 20 ++++++ Test/spv.privateVariableTypes.frag | 17 +++++ gtests/Spv.FromFile.cpp | 2 + 6 files changed, 172 insertions(+) mode change 100755 => 100644 SPIRV/GlslangToSpv.cpp create mode 100644 Test/baseResults/spv.functionParameterTypes.frag.out create mode 100644 Test/baseResults/spv.privateVariableTypes.frag.out create mode 100644 Test/spv.functionParameterTypes.frag create mode 100644 Test/spv.privateVariableTypes.frag diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp old mode 100755 new mode 100644 index 9bf37045..55b0ec6f --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -2878,6 +2878,11 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* builder.addCapability(spv::CapabilityStorageUniformBufferBlock16); break; default: + if (node->getType().containsBasicType(glslang::EbtFloat16)) + builder.addCapability(spv::CapabilityFloat16); + if (node->getType().containsBasicType(glslang::EbtInt16) || + node->getType().containsBasicType(glslang::EbtUint16)) + builder.addCapability(spv::CapabilityInt16); break; } } @@ -2894,6 +2899,8 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* } else if (storageClass == spv::StorageClassStorageBuffer) { builder.addExtension(spv::E_SPV_KHR_8bit_storage); builder.addCapability(spv::CapabilityStorageBuffer8BitAccess); + } else { + builder.addCapability(spv::CapabilityInt8); } } @@ -3799,6 +3806,16 @@ void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslF symbolValues[parameters[p]->getAsSymbolNode()->getId()] = function->getParamId(p); // give a name too builder.addName(function->getParamId(p), parameters[p]->getAsSymbolNode()->getName().c_str()); + + const glslang::TType& paramType = parameters[p]->getAsTyped()->getType(); + if (paramType.containsBasicType(glslang::EbtInt8) || + paramType.containsBasicType(glslang::EbtUint8)) + builder.addCapability(spv::CapabilityInt8); + if (paramType.containsBasicType(glslang::EbtInt16) || + paramType.containsBasicType(glslang::EbtUint16)) + builder.addCapability(spv::CapabilityInt16); + if (paramType.containsBasicType(glslang::EbtFloat16)) + builder.addCapability(spv::CapabilityFloat16); } } } diff --git a/Test/baseResults/spv.functionParameterTypes.frag.out b/Test/baseResults/spv.functionParameterTypes.frag.out new file mode 100644 index 00000000..24e780e2 --- /dev/null +++ b/Test/baseResults/spv.functionParameterTypes.frag.out @@ -0,0 +1,62 @@ +spv.functionParameterTypes.frag +// Module Version 10000 +// Generated by (magic number): 80007 +// Id's are bound by 34 + + Capability Shader + Capability Float16 + Capability Int64 + Capability Int16 + Capability Int8 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8" + Name 4 "main" + Name 29 "f(i81;u81;i161;u161;i641;u641;f161;" + Name 22 "i8" + Name 23 "u8" + Name 24 "i16" + Name 25 "u16" + Name 26 "i64" + Name 27 "u64" + Name 28 "f16" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 8 1 + 7: TypePointer Function 6(int8_t) + 8: TypeInt 8 0 + 9: TypePointer Function 8(int8_t) + 10: TypeInt 16 1 + 11: TypePointer Function 10(int16_t) + 12: TypeInt 16 0 + 13: TypePointer Function 12(int16_t) + 14: TypeInt 64 1 + 15: TypePointer Function 14(int64_t) + 16: TypeInt 64 0 + 17: TypePointer Function 16(int64_t) + 18: TypeFloat 16 + 19: TypePointer Function 18(float16_t) + 20: TypeInt 32 1 + 21: TypeFunction 20(int) 7(ptr) 9(ptr) 11(ptr) 13(ptr) 15(ptr) 17(ptr) 19(ptr) + 31: 20(int) Constant 0 + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd +29(f(i81;u81;i161;u161;i641;u641;f161;): 20(int) Function None 21 + 22(i8): 7(ptr) FunctionParameter + 23(u8): 9(ptr) FunctionParameter + 24(i16): 11(ptr) FunctionParameter + 25(u16): 13(ptr) FunctionParameter + 26(i64): 15(ptr) FunctionParameter + 27(u64): 17(ptr) FunctionParameter + 28(f16): 19(ptr) FunctionParameter + 30: Label + ReturnValue 31 + FunctionEnd diff --git a/Test/baseResults/spv.privateVariableTypes.frag.out b/Test/baseResults/spv.privateVariableTypes.frag.out new file mode 100644 index 00000000..9b4063ed --- /dev/null +++ b/Test/baseResults/spv.privateVariableTypes.frag.out @@ -0,0 +1,54 @@ +spv.privateVariableTypes.frag +// Module Version 10000 +// Generated by (magic number): 80007 +// Id's are bound by 27 + + Capability Shader + Capability Float16 + Capability Int64 + Capability Int16 + Capability Int8 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8" + Name 4 "main" + Name 8 "i8" + Name 11 "u8" + Name 14 "i16" + Name 17 "u16" + Name 20 "i64" + Name 23 "u64" + Name 26 "f16" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 8 1 + 7: TypePointer Private 6(int8_t) + 8(i8): 7(ptr) Variable Private + 9: TypeInt 8 0 + 10: TypePointer Private 9(int8_t) + 11(u8): 10(ptr) Variable Private + 12: TypeInt 16 1 + 13: TypePointer Private 12(int16_t) + 14(i16): 13(ptr) Variable Private + 15: TypeInt 16 0 + 16: TypePointer Private 15(int16_t) + 17(u16): 16(ptr) Variable Private + 18: TypeInt 64 1 + 19: TypePointer Private 18(int64_t) + 20(i64): 19(ptr) Variable Private + 21: TypeInt 64 0 + 22: TypePointer Private 21(int64_t) + 23(u64): 22(ptr) Variable Private + 24: TypeFloat 16 + 25: TypePointer Private 24(float16_t) + 26(f16): 25(ptr) Variable Private + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd diff --git a/Test/spv.functionParameterTypes.frag b/Test/spv.functionParameterTypes.frag new file mode 100644 index 00000000..08c16875 --- /dev/null +++ b/Test/spv.functionParameterTypes.frag @@ -0,0 +1,20 @@ +#version 460 core +#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable +#extension GL_EXT_shader_explicit_arithmetic_types_int8 : enable +#extension GL_EXT_shader_explicit_arithmetic_types_int16 : enable +#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable + +int f(int8_t i8, + uint8_t u8, + int16_t i16, + uint16_t u16, + int64_t i64, + uint64_t u64, + float16_t f16) +{ + return 0; +} + +void main() +{ +} diff --git a/Test/spv.privateVariableTypes.frag b/Test/spv.privateVariableTypes.frag new file mode 100644 index 00000000..cb6981f7 --- /dev/null +++ b/Test/spv.privateVariableTypes.frag @@ -0,0 +1,17 @@ +#version 460 core +#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable +#extension GL_EXT_shader_explicit_arithmetic_types_int8 : enable +#extension GL_EXT_shader_explicit_arithmetic_types_int16 : enable +#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable + +int8_t i8; +uint8_t u8; +int16_t i16; +uint16_t u16; +int64_t i64; +uint64_t u64; +float16_t f16; + +void main() +{ +} diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 1a144072..28981ac6 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -307,6 +307,7 @@ INSTANTIATE_TEST_CASE_P( "spv.functionCall.frag", "spv.functionNestedOpaque.vert", "spv.functionSemantics.frag", + "spv.functionParameterTypes.frag", "spv.GeometryShaderPassthrough.geom", "spv.interpOps.frag", "spv.int64.frag", @@ -334,6 +335,7 @@ INSTANTIATE_TEST_CASE_P( "spv.precision.frag", "spv.precisionNonESSamp.frag", "spv.prepost.frag", + "spv.privateVariableTypes.frag", "spv.qualifiers.vert", "spv.sample.frag", "spv.sampleId.frag", From 21eebe74214488264bbf0d19323a03c13a9e53a7 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 6 Jun 2019 13:18:08 -0600 Subject: [PATCH 02/42] Uppdate spirv-tools known-good --- known_good.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/known_good.json b/known_good.json index 337a573d..9c2bb407 100644 --- a/known_good.json +++ b/known_good.json @@ -5,7 +5,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "2c0111e6eba779cf30e8c7f5a733ea0762895ba0" + "commit" : "d01a3c3b4b76e942e1c22adca5a9713197dde901" }, { "name" : "spirv-tools/external/spirv-headers", From fd556e32b31ec352641205a52cf8769c3af40413 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Fri, 7 Jun 2019 14:42:08 -0500 Subject: [PATCH 03/42] Use spvValidatorOptionsSetBeforeHlslLegalization for pre-legalized HLSL --- SPIRV/GlslangToSpv.cpp | 7 +++++-- SPIRV/SpvTools.cpp | 3 ++- SPIRV/SpvTools.h | 2 +- Test/baseResults/hlsl.structbuffer.fn2.comp.out | 1 - 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 7eba1b6a..76140a9f 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -8090,11 +8090,14 @@ void GlslangToSpv(const TIntermediate& intermediate, std::vector& #if ENABLE_OPT // If from HLSL, run spirv-opt to "legalize" the SPIR-V for Vulkan // eg. forward and remove memory writes of opaque types. - if ((intermediate.getSource() == EShSourceHlsl || options->optimizeSize) && !options->disableOptimizer) + bool prelegalization = intermediate.getSource() == EShSourceHlsl; + if ((intermediate.getSource() == EShSourceHlsl || options->optimizeSize) && !options->disableOptimizer) { SpirvToolsLegalize(intermediate, spirv, logger, options); + prelegalization = false; + } if (options->validate) - SpirvToolsValidate(intermediate, spirv, logger); + SpirvToolsValidate(intermediate, spirv, logger, prelegalization); if (options->disassemble) SpirvToolsDisassemble(std::cout, spirv); diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index db26d590..698f154a 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -103,7 +103,7 @@ void SpirvToolsDisassemble(std::ostream& out, const std::vector& s // Apply the SPIRV-Tools validator to generated SPIR-V. void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector& spirv, - spv::SpvBuildLogger* logger) + spv::SpvBuildLogger* logger, bool prelegalization) { // validate spv_context context = spvContextCreate(MapToSpirvToolsEnv(intermediate.getSpv(), logger)); @@ -111,6 +111,7 @@ void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector< spv_diagnostic diagnostic = nullptr; spv_validator_options options = spvValidatorOptionsCreate(); spvValidatorOptionsSetRelaxBlockLayout(options, intermediate.usingHlslOffsets()); + spvValidatorOptionsSetBeforeHlslLegalization(options, prelegalization); spvValidateWithOptions(context, options, &binary, &diagnostic); // report diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h index 7e49ae0b..cf8fc859 100644 --- a/SPIRV/SpvTools.h +++ b/SPIRV/SpvTools.h @@ -66,7 +66,7 @@ void SpirvToolsDisassemble(std::ostream& out, const std::vector& s // Apply the SPIRV-Tools validator to generated SPIR-V. void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector& spirv, - spv::SpvBuildLogger*); + spv::SpvBuildLogger*, bool prelegalization); // Apply the SPIRV-Tools optimizer to generated SPIR-V, for the purpose of // legalizing HLSL SPIR-V. diff --git a/Test/baseResults/hlsl.structbuffer.fn2.comp.out b/Test/baseResults/hlsl.structbuffer.fn2.comp.out index c9633cd6..517b48c8 100644 --- a/Test/baseResults/hlsl.structbuffer.fn2.comp.out +++ b/Test/baseResults/hlsl.structbuffer.fn2.comp.out @@ -135,7 +135,6 @@ local_size = (256, 1, 1) 0:? 'g_output' (layout( binding=1 rg32ui) uniform uimageBuffer) 0:? 'dispatchId' ( in 3-component vector of uint GlobalInvocationID) -Validation failed // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 63 From 92b5c9ee910e9872ee6a0d2655d55731d8a1aab3 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Sat, 8 Jun 2019 04:30:46 -0600 Subject: [PATCH 04/42] GLSL: Revert f6873f7 to fix #1764. --- Test/baseResults/310.comp.out | 3 +-- glslang/MachineIndependent/ParseHelper.cpp | 5 +++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Test/baseResults/310.comp.out b/Test/baseResults/310.comp.out index 4b65ea11..b4136b0a 100644 --- a/Test/baseResults/310.comp.out +++ b/Test/baseResults/310.comp.out @@ -29,7 +29,6 @@ ERROR: 0:94: 'writeonly' : argument cannot drop memory qualifier when passed to ERROR: 0:97: '' : memory qualifiers cannot be used on this type ERROR: 0:98: '' : memory qualifiers cannot be used on this type ERROR: 0:109: 'format' : image formats must match -ERROR: 0:110: 'restrict' : argument cannot drop memory qualifier when passed to formal parameter ERROR: 0:110: 'format' : image formats must match ERROR: 0:111: 'format' : image formats must match ERROR: 0:114: 'image load-store format' : not supported with this profile: es @@ -87,7 +86,7 @@ WARNING: 0:238: '#define' : names containing consecutive underscores are reserve ERROR: 0:244: 'gl_DeviceIndex' : required extension not requested: GL_EXT_device_group ERROR: 0:245: 'gl_ViewIndex' : undeclared identifier ERROR: 0:255: 'gl_ViewIndex' : undeclared identifier -ERROR: 86 compilation errors. No code generated. +ERROR: 85 compilation errors. No code generated. Shader version: 310 diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 7b0f0660..8e570ae0 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -1165,8 +1165,9 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction error(arguments->getLoc(), message, "readonly", ""); if (argQualifier.writeonly && ! formalQualifier.writeonly) error(arguments->getLoc(), message, "writeonly", ""); - if (!builtIn && argQualifier.restrict && ! formalQualifier.restrict) - error(arguments->getLoc(), message, "restrict", ""); + // Don't check 'restrict', it is different than the rest: + // "...but only restrict can be taken away from a calling argument, by a formal parameter that + // lacks the restrict qualifier..." } if (!builtIn && argQualifier.layoutFormat != formalQualifier.layoutFormat) { // we have mismatched formats, which should only be allowed if writeonly From 2cb2f197a7cad508d4fcda873aa01e2f736992b8 Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Tue, 4 Jun 2019 08:43:32 -0400 Subject: [PATCH 05/42] Add support for GL_NV_shader_sm_builtins Including spirv and AST tests Also increase size of TBuiltInVariable bitfields since we've now exceeded 127 and add a static_assert to make this easier to find next time it happens! --- SPIRV/GLSL.ext.NV.h | 3 + SPIRV/GlslangToSpv.cpp | 18 +++++ SPIRV/doc.cpp | 5 ++ Test/baseResults/glsl.450.subgroup.frag.out | 22 +++++- Test/baseResults/glsl.450.subgroup.geom.out | 22 +++++- Test/baseResults/glsl.450.subgroup.tesc.out | 22 +++++- Test/baseResults/glsl.450.subgroup.tese.out | 22 +++++- Test/baseResults/glsl.450.subgroup.vert.out | 22 +++++- .../glsl.450.subgroupBasic.comp.out | 22 +++++- Test/baseResults/glsl.460.subgroup.mesh.out | 22 +++++- Test/baseResults/glsl.460.subgroup.rahit.out | 22 +++++- Test/baseResults/glsl.460.subgroup.rcall.out | 22 +++++- Test/baseResults/glsl.460.subgroup.rchit.out | 22 +++++- Test/baseResults/glsl.460.subgroup.rgen.out | 22 +++++- Test/baseResults/glsl.460.subgroup.rint.out | 22 +++++- Test/baseResults/glsl.460.subgroup.rmiss.out | 22 +++++- Test/baseResults/glsl.460.subgroup.task.out | 22 +++++- Test/baseResults/spv.smBuiltins.frag.out | 50 ++++++++++++++ Test/baseResults/spv.smBuiltins.vert.out | 62 +++++++++++++++++ Test/baseResults/spv.specConstant.vert.out | 6 +- Test/glsl.450.subgroup.frag | 20 ++++++ Test/glsl.450.subgroup.geom | 20 ++++++ Test/glsl.450.subgroup.tesc | 20 ++++++ Test/glsl.450.subgroup.tese | 21 ++++++ Test/glsl.450.subgroup.vert | 21 ++++++ Test/glsl.450.subgroupBasic.comp | 20 ++++++ Test/glsl.460.subgroup.mesh | 21 ++++++ Test/glsl.460.subgroup.rahit | 20 ++++++ Test/glsl.460.subgroup.rcall | 20 ++++++ Test/glsl.460.subgroup.rchit | 20 ++++++ Test/glsl.460.subgroup.rgen | 20 ++++++ Test/glsl.460.subgroup.rint | 20 ++++++ Test/glsl.460.subgroup.rmiss | 20 ++++++ Test/glsl.460.subgroup.task | 20 ++++++ Test/spv.smBuiltins.frag | 7 ++ Test/spv.smBuiltins.vert | 11 +++ glslang/Include/BaseTypes.h | 11 +++ glslang/Include/Types.h | 5 +- glslang/MachineIndependent/Initialize.cpp | 69 +++++++++++++++++++ glslang/MachineIndependent/Versions.cpp | 2 + glslang/MachineIndependent/Versions.h | 1 + gtests/Spv.FromFile.cpp | 2 + known_good.json | 2 +- 43 files changed, 825 insertions(+), 20 deletions(-) create mode 100644 Test/baseResults/spv.smBuiltins.frag.out create mode 100644 Test/baseResults/spv.smBuiltins.vert.out create mode 100644 Test/spv.smBuiltins.frag create mode 100644 Test/spv.smBuiltins.vert diff --git a/SPIRV/GLSL.ext.NV.h b/SPIRV/GLSL.ext.NV.h index ede2c570..50146da1 100644 --- a/SPIRV/GLSL.ext.NV.h +++ b/SPIRV/GLSL.ext.NV.h @@ -75,4 +75,7 @@ const char* const E_SPV_NV_shading_rate = "SPV_NV_shading_rate"; //SPV_NV_cooperative_matrix const char* const E_SPV_NV_cooperative_matrix = "SPV_NV_cooperative_matrix"; +//SPV_NV_shader_sm_builtins +const char* const E_SPV_NV_shader_sm_builtins = "SPV_NV_shader_sm_builtins"; + #endif // #ifndef GLSLextNV_H diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 76140a9f..312e06ad 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -946,6 +946,24 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI case glslang::EbvMeshViewIndicesNV: return spv::BuiltInMeshViewIndicesNV; #endif + + // sm builtins + case glslang::EbvWarpsPerSM: + builder.addExtension(spv::E_SPV_NV_shader_sm_builtins); + builder.addCapability(spv::CapabilityShaderSMBuiltinsNV); + return spv::BuiltInWarpsPerSMNV; + case glslang::EbvSMCount: + builder.addExtension(spv::E_SPV_NV_shader_sm_builtins); + builder.addCapability(spv::CapabilityShaderSMBuiltinsNV); + return spv::BuiltInSMCountNV; + case glslang::EbvWarpID: + builder.addExtension(spv::E_SPV_NV_shader_sm_builtins); + builder.addCapability(spv::CapabilityShaderSMBuiltinsNV); + return spv::BuiltInWarpIDNV; + case glslang::EbvSMID: + builder.addExtension(spv::E_SPV_NV_shader_sm_builtins); + builder.addCapability(spv::CapabilityShaderSMBuiltinsNV); + return spv::BuiltInSMIDNV; default: return spv::BuiltInMax; } diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index da9494d4..3e68345b 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -423,6 +423,10 @@ const char* BuiltInString(int builtIn) case BuiltInMeshViewCountNV: return "MeshViewCountNV"; case BuiltInMeshViewIndicesNV: return "MeshViewIndicesNV"; #endif + case BuiltInWarpsPerSMNV: return "WarpsPerSMNV"; + case BuiltInSMCountNV: return "SMCountNV"; + case BuiltInWarpIDNV: return "WarpIDNV"; + case BuiltInSMIDNV: return "SMIDNV"; default: return "Bad"; } @@ -948,6 +952,7 @@ const char* CapabilityString(int info) case CapabilityVariablePointers: return "VariablePointers"; case CapabilityCooperativeMatrixNV: return "CooperativeMatrixNV"; + case CapabilityShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV"; case CapabilityFragmentShaderSampleInterlockEXT: return "CapabilityFragmentShaderSampleInterlockEXT"; case CapabilityFragmentShaderPixelInterlockEXT: return "CapabilityFragmentShaderPixelInterlockEXT"; diff --git a/Test/baseResults/glsl.450.subgroup.frag.out b/Test/baseResults/glsl.450.subgroup.frag.out index dd16c1fc..e61523e9 100644 --- a/Test/baseResults/glsl.450.subgroup.frag.out +++ b/Test/baseResults/glsl.450.subgroup.frag.out @@ -85,7 +85,11 @@ ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned -ERROR: 86 compilation errors. No code generated. +ERROR: 0:232: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:233: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:234: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:235: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 90 compilation errors. No code generated. Shader version: 450 @@ -97,6 +101,7 @@ Requested GL_KHR_shader_subgroup_quad Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:3 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float) @@ -597,6 +602,20 @@ ERROR: node is still EOpNull! 0:226 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint) 0:226 'ballot' ( temp 4-component vector of uint) 0:226 'parti' ( temp 4-component vector of uint) +0:230 Function Definition: sm_builtins_err( ( global void) +0:230 Function Parameters: +0:232 Sequence +0:232 'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV) +0:233 'gl_SMCountNV' ( flat in uint SMCountNV) +0:234 'gl_WarpIDNV' ( flat in uint WarpIDNV) +0:235 'gl_SMIDNV' ( flat in uint SMIDNV) +0:242 Function Definition: sm_builtins( ( global void) +0:242 Function Parameters: +0:244 Sequence +0:244 'gl_WarpsPerSMNV' ( flat in uint WarpsPerSMNV) +0:245 'gl_SMCountNV' ( flat in uint SMCountNV) +0:246 'gl_WarpIDNV' ( flat in uint WarpIDNV) +0:247 'gl_SMIDNV' ( flat in uint SMIDNV) 0:? Linker Objects 0:? 'data' (layout( location=0) out 4-component vector of uint) @@ -613,6 +632,7 @@ Requested GL_KHR_shader_subgroup_quad Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:105 Function Definition: main( ( global void) diff --git a/Test/baseResults/glsl.450.subgroup.geom.out b/Test/baseResults/glsl.450.subgroup.geom.out index 998f6c22..baf82dc4 100644 --- a/Test/baseResults/glsl.450.subgroup.geom.out +++ b/Test/baseResults/glsl.450.subgroup.geom.out @@ -85,7 +85,11 @@ ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned -ERROR: 86 compilation errors. No code generated. +ERROR: 0:238: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:239: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:240: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:241: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 90 compilation errors. No code generated. Shader version: 450 @@ -97,6 +101,7 @@ Requested GL_KHR_shader_subgroup_quad Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned invocations = -1 max_vertices = 1 @@ -606,6 +611,20 @@ ERROR: node is still EOpNull! 0:232 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint) 0:232 'ballot' ( temp 4-component vector of uint) 0:232 'parti' ( temp 4-component vector of uint) +0:236 Function Definition: sm_builtins_err( ( global void) +0:236 Function Parameters: +0:238 Sequence +0:238 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:239 'gl_SMCountNV' ( in uint SMCountNV) +0:240 'gl_WarpIDNV' ( in uint WarpIDNV) +0:241 'gl_SMIDNV' ( in uint SMIDNV) +0:248 Function Definition: sm_builtins( ( global void) +0:248 Function Parameters: +0:250 Sequence +0:250 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:251 'gl_SMCountNV' ( in uint SMCountNV) +0:252 'gl_WarpIDNV' ( in uint WarpIDNV) +0:253 'gl_SMIDNV' ( in uint SMIDNV) 0:? Linker Objects 0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result}) @@ -622,6 +641,7 @@ Requested GL_KHR_shader_subgroup_quad Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned invocations = 1 max_vertices = 1 diff --git a/Test/baseResults/glsl.450.subgroup.tesc.out b/Test/baseResults/glsl.450.subgroup.tesc.out index fef9a044..eeee3877 100644 --- a/Test/baseResults/glsl.450.subgroup.tesc.out +++ b/Test/baseResults/glsl.450.subgroup.tesc.out @@ -85,7 +85,11 @@ ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned -ERROR: 86 compilation errors. No code generated. +ERROR: 0:237: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:238: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:239: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:240: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 90 compilation errors. No code generated. Shader version: 450 @@ -97,6 +101,7 @@ Requested GL_KHR_shader_subgroup_quad Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned vertices = 1 ERROR: node is still EOpNull! @@ -603,6 +608,20 @@ ERROR: node is still EOpNull! 0:231 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint) 0:231 'ballot' ( temp 4-component vector of uint) 0:231 'parti' ( temp 4-component vector of uint) +0:235 Function Definition: sm_builtins_err( ( global void) +0:235 Function Parameters: +0:237 Sequence +0:237 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:238 'gl_SMCountNV' ( in uint SMCountNV) +0:239 'gl_WarpIDNV' ( in uint WarpIDNV) +0:240 'gl_SMIDNV' ( in uint SMIDNV) +0:247 Function Definition: sm_builtins( ( global void) +0:247 Function Parameters: +0:249 Sequence +0:249 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:250 'gl_SMCountNV' ( in uint SMCountNV) +0:251 'gl_WarpIDNV' ( in uint WarpIDNV) +0:252 'gl_SMIDNV' ( in uint SMIDNV) 0:? Linker Objects 0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result}) @@ -619,6 +638,7 @@ Requested GL_KHR_shader_subgroup_quad Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned vertices = 1 ERROR: node is still EOpNull! diff --git a/Test/baseResults/glsl.450.subgroup.tese.out b/Test/baseResults/glsl.450.subgroup.tese.out index de44d555..3f05d77c 100644 --- a/Test/baseResults/glsl.450.subgroup.tese.out +++ b/Test/baseResults/glsl.450.subgroup.tese.out @@ -85,7 +85,11 @@ ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned -ERROR: 86 compilation errors. No code generated. +ERROR: 0:237: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:238: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:239: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:240: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 90 compilation errors. No code generated. Shader version: 450 @@ -97,6 +101,7 @@ Requested GL_KHR_shader_subgroup_quad Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned input primitive = isolines vertex spacing = none @@ -605,6 +610,20 @@ ERROR: node is still EOpNull! 0:231 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint) 0:231 'ballot' ( temp 4-component vector of uint) 0:231 'parti' ( temp 4-component vector of uint) +0:235 Function Definition: sm_builtins_err( ( global void) +0:235 Function Parameters: +0:237 Sequence +0:237 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:238 'gl_SMCountNV' ( in uint SMCountNV) +0:239 'gl_WarpIDNV' ( in uint WarpIDNV) +0:240 'gl_SMIDNV' ( in uint SMIDNV) +0:247 Function Definition: sm_builtins( ( global void) +0:247 Function Parameters: +0:249 Sequence +0:249 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:250 'gl_SMCountNV' ( in uint SMCountNV) +0:251 'gl_WarpIDNV' ( in uint WarpIDNV) +0:252 'gl_SMIDNV' ( in uint SMIDNV) 0:? Linker Objects 0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result}) @@ -621,6 +640,7 @@ Requested GL_KHR_shader_subgroup_quad Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned input primitive = isolines vertex spacing = equal_spacing diff --git a/Test/baseResults/glsl.450.subgroup.vert.out b/Test/baseResults/glsl.450.subgroup.vert.out index 8fad6134..8850bf4f 100644 --- a/Test/baseResults/glsl.450.subgroup.vert.out +++ b/Test/baseResults/glsl.450.subgroup.vert.out @@ -85,7 +85,11 @@ ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned -ERROR: 86 compilation errors. No code generated. +ERROR: 0:236: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:237: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:238: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:239: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 90 compilation errors. No code generated. Shader version: 450 @@ -97,6 +101,7 @@ Requested GL_KHR_shader_subgroup_quad Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:3 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float) @@ -602,6 +607,20 @@ ERROR: node is still EOpNull! 0:230 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint) 0:230 'ballot' ( temp 4-component vector of uint) 0:230 'parti' ( temp 4-component vector of uint) +0:234 Function Definition: sm_builtins_err( ( global void) +0:234 Function Parameters: +0:236 Sequence +0:236 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:237 'gl_SMCountNV' ( in uint SMCountNV) +0:238 'gl_WarpIDNV' ( in uint WarpIDNV) +0:239 'gl_SMIDNV' ( in uint SMIDNV) +0:246 Function Definition: sm_builtins( ( global void) +0:246 Function Parameters: +0:248 Sequence +0:248 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:249 'gl_SMCountNV' ( in uint SMCountNV) +0:250 'gl_WarpIDNV' ( in uint WarpIDNV) +0:251 'gl_SMIDNV' ( in uint SMIDNV) 0:? Linker Objects 0:? 'anon@0' (layout( set=0 binding=0 column_major std430) buffer block{layout( column_major std430 offset=0) buffer runtime-sized array of 4-component vector of uint result}) 0:? 'gl_VertexID' ( gl_VertexId int VertexId) @@ -620,6 +639,7 @@ Requested GL_KHR_shader_subgroup_quad Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:109 Function Definition: main( ( global void) diff --git a/Test/baseResults/glsl.450.subgroupBasic.comp.out b/Test/baseResults/glsl.450.subgroupBasic.comp.out index 168d80df..654138b4 100644 --- a/Test/baseResults/glsl.450.subgroupBasic.comp.out +++ b/Test/baseResults/glsl.450.subgroupBasic.comp.out @@ -85,7 +85,11 @@ ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned -ERROR: 86 compilation errors. No code generated. +ERROR: 0:242: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:243: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:244: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:245: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 90 compilation errors. No code generated. Shader version: 450 @@ -97,6 +101,7 @@ Requested GL_KHR_shader_subgroup_quad Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned local_size = (8, 8, 1) ERROR: node is still EOpNull! @@ -631,6 +636,20 @@ ERROR: node is still EOpNull! 0:236 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint) 0:236 'ballot' ( temp 4-component vector of uint) 0:236 'parti' ( temp 4-component vector of uint) +0:240 Function Definition: sm_builtins_err( ( global void) +0:240 Function Parameters: +0:242 Sequence +0:242 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:243 'gl_SMCountNV' ( in uint SMCountNV) +0:244 'gl_WarpIDNV' ( in uint WarpIDNV) +0:245 'gl_SMIDNV' ( in uint SMIDNV) +0:252 Function Definition: sm_builtins( ( global void) +0:252 Function Parameters: +0:254 Sequence +0:254 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:255 'gl_SMCountNV' ( in uint SMCountNV) +0:256 'gl_WarpIDNV' ( in uint WarpIDNV) +0:257 'gl_SMIDNV' ( in uint SMIDNV) 0:? Linker Objects 0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) 0:? 8 (const uint) @@ -651,6 +670,7 @@ Requested GL_KHR_shader_subgroup_quad Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned local_size = (8, 8, 1) ERROR: node is still EOpNull! diff --git a/Test/baseResults/glsl.460.subgroup.mesh.out b/Test/baseResults/glsl.460.subgroup.mesh.out index c8198817..bb0e4eb8 100644 --- a/Test/baseResults/glsl.460.subgroup.mesh.out +++ b/Test/baseResults/glsl.460.subgroup.mesh.out @@ -85,7 +85,11 @@ ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned -ERROR: 86 compilation errors. No code generated. +ERROR: 0:298: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:299: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:300: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:301: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 90 compilation errors. No code generated. Shader version: 460 @@ -98,6 +102,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_mesh_shader +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned max_vertices = 81 max_primitives = 32 @@ -887,6 +892,20 @@ ERROR: node is still EOpNull! 0:292 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint) 0:292 'ballot' ( temp 4-component vector of uint) 0:292 'parti' ( temp 4-component vector of uint) +0:296 Function Definition: sm_builtins_err( ( global void) +0:296 Function Parameters: +0:298 Sequence +0:298 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:299 'gl_SMCountNV' ( in uint SMCountNV) +0:300 'gl_WarpIDNV' ( in uint WarpIDNV) +0:301 'gl_SMIDNV' ( in uint SMIDNV) +0:308 Function Definition: sm_builtins( ( global void) +0:308 Function Parameters: +0:310 Sequence +0:310 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:311 'gl_SMCountNV' ( in uint SMCountNV) +0:312 'gl_WarpIDNV' ( in uint WarpIDNV) +0:313 'gl_SMIDNV' ( in uint SMIDNV) 0:? Linker Objects 0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) 0:? 32 (const uint) @@ -910,6 +929,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_mesh_shader +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned max_vertices = 81 max_primitives = 32 diff --git a/Test/baseResults/glsl.460.subgroup.rahit.out b/Test/baseResults/glsl.460.subgroup.rahit.out index aba573aa..0a1e4f4a 100644 --- a/Test/baseResults/glsl.460.subgroup.rahit.out +++ b/Test/baseResults/glsl.460.subgroup.rahit.out @@ -85,7 +85,11 @@ ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned -ERROR: 86 compilation errors. No code generated. +ERROR: 0:259: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:260: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:261: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:262: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 90 compilation errors. No code generated. Shader version: 460 @@ -98,6 +102,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_ray_tracing +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:4 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float) @@ -671,6 +676,20 @@ ERROR: node is still EOpNull! 0:253 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint) 0:253 'ballot' ( temp 4-component vector of uint) 0:253 'parti' ( temp 4-component vector of uint) +0:257 Function Definition: sm_builtins_err( ( global void) +0:257 Function Parameters: +0:259 Sequence +0:259 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:260 'gl_SMCountNV' ( in uint SMCountNV) +0:261 'gl_WarpIDNV' ( in uint WarpIDNV) +0:262 'gl_SMIDNV' ( in uint SMIDNV) +0:269 Function Definition: sm_builtins( ( global void) +0:269 Function Parameters: +0:271 Sequence +0:271 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:272 'gl_SMCountNV' ( in uint SMCountNV) +0:273 'gl_WarpIDNV' ( in uint WarpIDNV) +0:274 'gl_SMIDNV' ( in uint SMIDNV) 0:? Linker Objects 0:? 'incomingPayload' (layout( location=1) rayPayloadInNV 4-component vector of float) @@ -688,6 +707,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_ray_tracing +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:106 Function Definition: main( ( global void) diff --git a/Test/baseResults/glsl.460.subgroup.rcall.out b/Test/baseResults/glsl.460.subgroup.rcall.out index d6b4895d..6bffdc9c 100644 --- a/Test/baseResults/glsl.460.subgroup.rcall.out +++ b/Test/baseResults/glsl.460.subgroup.rcall.out @@ -85,7 +85,11 @@ ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned -ERROR: 86 compilation errors. No code generated. +ERROR: 0:247: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:248: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:249: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:250: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 90 compilation errors. No code generated. Shader version: 460 @@ -98,6 +102,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_ray_tracing +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:4 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float) @@ -614,6 +619,20 @@ ERROR: node is still EOpNull! 0:241 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint) 0:241 'ballot' ( temp 4-component vector of uint) 0:241 'parti' ( temp 4-component vector of uint) +0:245 Function Definition: sm_builtins_err( ( global void) +0:245 Function Parameters: +0:247 Sequence +0:247 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:248 'gl_SMCountNV' ( in uint SMCountNV) +0:249 'gl_WarpIDNV' ( in uint WarpIDNV) +0:250 'gl_SMIDNV' ( in uint SMIDNV) +0:257 Function Definition: sm_builtins( ( global void) +0:257 Function Parameters: +0:259 Sequence +0:259 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:260 'gl_SMCountNV' ( in uint SMCountNV) +0:261 'gl_WarpIDNV' ( in uint WarpIDNV) +0:262 'gl_SMIDNV' ( in uint SMIDNV) 0:? Linker Objects 0:? 'data0' (layout( location=0) callableDataNV 4-component vector of float) 0:? 'anon@0' (layout( location=1) callableDataInNV block{ callableDataInNV uint data1}) @@ -632,6 +651,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_ray_tracing +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:109 Function Definition: main( ( global void) diff --git a/Test/baseResults/glsl.460.subgroup.rchit.out b/Test/baseResults/glsl.460.subgroup.rchit.out index 14a8d84b..1ea9e69d 100644 --- a/Test/baseResults/glsl.460.subgroup.rchit.out +++ b/Test/baseResults/glsl.460.subgroup.rchit.out @@ -85,7 +85,11 @@ ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned -ERROR: 86 compilation errors. No code generated. +ERROR: 0:257: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:258: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:259: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:260: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 90 compilation errors. No code generated. Shader version: 460 @@ -98,6 +102,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_ray_tracing +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:4 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float) @@ -680,6 +685,20 @@ ERROR: node is still EOpNull! 0:251 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint) 0:251 'ballot' ( temp 4-component vector of uint) 0:251 'parti' ( temp 4-component vector of uint) +0:255 Function Definition: sm_builtins_err( ( global void) +0:255 Function Parameters: +0:257 Sequence +0:257 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:258 'gl_SMCountNV' ( in uint SMCountNV) +0:259 'gl_WarpIDNV' ( in uint WarpIDNV) +0:260 'gl_SMIDNV' ( in uint SMIDNV) +0:267 Function Definition: sm_builtins( ( global void) +0:267 Function Parameters: +0:269 Sequence +0:269 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:270 'gl_SMCountNV' ( in uint SMCountNV) +0:271 'gl_WarpIDNV' ( in uint WarpIDNV) +0:272 'gl_SMIDNV' ( in uint SMIDNV) 0:? Linker Objects 0:? 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV) 0:? 'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float) @@ -699,6 +718,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_ray_tracing +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:108 Function Definition: main( ( global void) diff --git a/Test/baseResults/glsl.460.subgroup.rgen.out b/Test/baseResults/glsl.460.subgroup.rgen.out index a3c5bbb5..dfe1e2bb 100644 --- a/Test/baseResults/glsl.460.subgroup.rgen.out +++ b/Test/baseResults/glsl.460.subgroup.rgen.out @@ -85,7 +85,11 @@ ERROR: 0:96: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques ERROR: 0:97: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:98: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:99: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned -ERROR: 86 compilation errors. No code generated. +ERROR: 0:251: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:252: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:253: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:254: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 90 compilation errors. No code generated. Shader version: 460 @@ -98,6 +102,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_ray_tracing +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:4 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float) @@ -644,6 +649,20 @@ ERROR: node is still EOpNull! 0:245 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint) 0:245 'ballot' ( temp 4-component vector of uint) 0:245 'parti' ( temp 4-component vector of uint) +0:249 Function Definition: sm_builtins_err( ( global void) +0:249 Function Parameters: +0:251 Sequence +0:251 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:252 'gl_SMCountNV' ( in uint SMCountNV) +0:253 'gl_WarpIDNV' ( in uint WarpIDNV) +0:254 'gl_SMIDNV' ( in uint SMIDNV) +0:261 Function Definition: sm_builtins( ( global void) +0:261 Function Parameters: +0:263 Sequence +0:263 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:264 'gl_SMCountNV' ( in uint SMCountNV) +0:265 'gl_WarpIDNV' ( in uint WarpIDNV) +0:266 'gl_SMIDNV' ( in uint SMIDNV) 0:? Linker Objects 0:? 'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV) 0:? 'accNV1' (layout( set=0 binding=1) uniform accelerationStructureNV) @@ -664,6 +683,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_ray_tracing +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:113 Function Definition: main( ( global void) diff --git a/Test/baseResults/glsl.460.subgroup.rint.out b/Test/baseResults/glsl.460.subgroup.rint.out index 31a8a59c..9915ecf7 100644 --- a/Test/baseResults/glsl.460.subgroup.rint.out +++ b/Test/baseResults/glsl.460.subgroup.rint.out @@ -85,7 +85,11 @@ ERROR: 0:97: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques ERROR: 0:98: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:99: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:100: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned -ERROR: 86 compilation errors. No code generated. +ERROR: 0:257: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:258: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:259: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:260: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 90 compilation errors. No code generated. Shader version: 460 @@ -98,6 +102,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_ray_tracing +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:5 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float) @@ -658,6 +663,20 @@ ERROR: node is still EOpNull! 0:251 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint) 0:251 'ballot' ( temp 4-component vector of uint) 0:251 'parti' ( temp 4-component vector of uint) +0:255 Function Definition: sm_builtins_err( ( global void) +0:255 Function Parameters: +0:257 Sequence +0:257 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:258 'gl_SMCountNV' ( in uint SMCountNV) +0:259 'gl_WarpIDNV' ( in uint WarpIDNV) +0:260 'gl_SMIDNV' ( in uint SMIDNV) +0:267 Function Definition: sm_builtins( ( global void) +0:267 Function Parameters: +0:269 Sequence +0:269 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:270 'gl_SMCountNV' ( in uint SMCountNV) +0:271 'gl_WarpIDNV' ( in uint WarpIDNV) +0:272 'gl_SMIDNV' ( in uint SMIDNV) 0:? Linker Objects 0:? 'iAttr' ( hitAttributeNV 4-component vector of float) @@ -675,6 +694,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_ray_tracing +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:108 Function Definition: main( ( global void) diff --git a/Test/baseResults/glsl.460.subgroup.rmiss.out b/Test/baseResults/glsl.460.subgroup.rmiss.out index 2ca136d0..ddf7d1b3 100644 --- a/Test/baseResults/glsl.460.subgroup.rmiss.out +++ b/Test/baseResults/glsl.460.subgroup.rmiss.out @@ -85,7 +85,11 @@ ERROR: 0:97: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques ERROR: 0:98: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:99: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:100: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned -ERROR: 86 compilation errors. No code generated. +ERROR: 0:251: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:252: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:253: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:254: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 90 compilation errors. No code generated. Shader version: 460 @@ -98,6 +102,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_ray_tracing +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:5 Function Definition: undeclared_errors(vf4; ( global 4-component vector of float) @@ -652,6 +657,20 @@ ERROR: node is still EOpNull! 0:245 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint) 0:245 'ballot' ( temp 4-component vector of uint) 0:245 'parti' ( temp 4-component vector of uint) +0:249 Function Definition: sm_builtins_err( ( global void) +0:249 Function Parameters: +0:251 Sequence +0:251 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:252 'gl_SMCountNV' ( in uint SMCountNV) +0:253 'gl_WarpIDNV' ( in uint WarpIDNV) +0:254 'gl_SMIDNV' ( in uint SMIDNV) +0:261 Function Definition: sm_builtins( ( global void) +0:261 Function Parameters: +0:263 Sequence +0:263 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:264 'gl_SMCountNV' ( in uint SMCountNV) +0:265 'gl_WarpIDNV' ( in uint WarpIDNV) +0:266 'gl_SMIDNV' ( in uint SMIDNV) 0:? Linker Objects 0:? 'accNV' (layout( set=0 binding=0) uniform accelerationStructureNV) 0:? 'localPayload' (layout( location=0) rayPayloadNV 4-component vector of float) @@ -671,6 +690,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_ray_tracing +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned ERROR: node is still EOpNull! 0:109 Function Definition: main( ( global void) diff --git a/Test/baseResults/glsl.460.subgroup.task.out b/Test/baseResults/glsl.460.subgroup.task.out index d953646a..8d2a1d39 100644 --- a/Test/baseResults/glsl.460.subgroup.task.out +++ b/Test/baseResults/glsl.460.subgroup.task.out @@ -85,7 +85,11 @@ ERROR: 0:95: 'subgroupPartitionedExclusiveMaxNV' : required extension not reques ERROR: 0:96: 'subgroupPartitionedExclusiveAndNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:97: 'subgroupPartitionedExclusiveOrNV' : required extension not requested: GL_NV_shader_subgroup_partitioned ERROR: 0:98: 'subgroupPartitionedExclusiveXorNV' : required extension not requested: GL_NV_shader_subgroup_partitioned -ERROR: 86 compilation errors. No code generated. +ERROR: 0:288: 'gl_WarpsPerSMNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:289: 'gl_SMCountNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:290: 'gl_WarpIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 0:291: 'gl_SMIDNV' : required extension not requested: GL_NV_shader_sm_builtins +ERROR: 90 compilation errors. No code generated. Shader version: 460 @@ -98,6 +102,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_mesh_shader +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned local_size = (32, 1, 1) ERROR: node is still EOpNull! @@ -729,6 +734,20 @@ ERROR: node is still EOpNull! 0:282 subgroupPartitionedExclusiveXorNV ( global 4-component vector of uint) 0:282 'ballot' ( temp 4-component vector of uint) 0:282 'parti' ( temp 4-component vector of uint) +0:286 Function Definition: sm_builtins_err( ( global void) +0:286 Function Parameters: +0:288 Sequence +0:288 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:289 'gl_SMCountNV' ( in uint SMCountNV) +0:290 'gl_WarpIDNV' ( in uint WarpIDNV) +0:291 'gl_SMIDNV' ( in uint SMIDNV) +0:298 Function Definition: sm_builtins( ( global void) +0:298 Function Parameters: +0:300 Sequence +0:300 'gl_WarpsPerSMNV' ( in uint WarpsPerSMNV) +0:301 'gl_SMCountNV' ( in uint SMCountNV) +0:302 'gl_WarpIDNV' ( in uint WarpIDNV) +0:303 'gl_SMIDNV' ( in uint SMIDNV) 0:? Linker Objects 0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) 0:? 32 (const uint) @@ -753,6 +772,7 @@ Requested GL_KHR_shader_subgroup_shuffle Requested GL_KHR_shader_subgroup_shuffle_relative Requested GL_KHR_shader_subgroup_vote Requested GL_NV_mesh_shader +Requested GL_NV_shader_sm_builtins Requested GL_NV_shader_subgroup_partitioned local_size = (32, 1, 1) ERROR: node is still EOpNull! diff --git a/Test/baseResults/spv.smBuiltins.frag.out b/Test/baseResults/spv.smBuiltins.frag.out new file mode 100644 index 00000000..fda06eb5 --- /dev/null +++ b/Test/baseResults/spv.smBuiltins.frag.out @@ -0,0 +1,50 @@ +spv.smBuiltins.frag +// Module Version 10000 +// Generated by (magic number): 80007 +// Id's are bound by 20 + + Capability Shader + Capability ShaderSMBuiltinsNV + Extension "SPV_NV_shader_sm_builtins" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 11 13 15 17 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_NV_shader_sm_builtins" + Name 4 "main" + Name 9 "data" + Name 11 "gl_WarpsPerSMNV" + Name 13 "gl_SMCountNV" + Name 15 "gl_WarpIDNV" + Name 17 "gl_SMIDNV" + Decorate 9(data) Location 0 + Decorate 11(gl_WarpsPerSMNV) Flat + Decorate 11(gl_WarpsPerSMNV) BuiltIn WarpsPerSMNV + Decorate 13(gl_SMCountNV) Flat + Decorate 13(gl_SMCountNV) BuiltIn SMCountNV + Decorate 15(gl_WarpIDNV) Flat + Decorate 15(gl_WarpIDNV) BuiltIn WarpIDNV + Decorate 17(gl_SMIDNV) Flat + Decorate 17(gl_SMIDNV) BuiltIn SMIDNV + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 4 + 8: TypePointer Output 7(ivec4) + 9(data): 8(ptr) Variable Output + 10: TypePointer Input 6(int) +11(gl_WarpsPerSMNV): 10(ptr) Variable Input +13(gl_SMCountNV): 10(ptr) Variable Input + 15(gl_WarpIDNV): 10(ptr) Variable Input + 17(gl_SMIDNV): 10(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 12: 6(int) Load 11(gl_WarpsPerSMNV) + 14: 6(int) Load 13(gl_SMCountNV) + 16: 6(int) Load 15(gl_WarpIDNV) + 18: 6(int) Load 17(gl_SMIDNV) + 19: 7(ivec4) CompositeConstruct 12 14 16 18 + Store 9(data) 19 + Return + FunctionEnd diff --git a/Test/baseResults/spv.smBuiltins.vert.out b/Test/baseResults/spv.smBuiltins.vert.out new file mode 100644 index 00000000..8423e5b8 --- /dev/null +++ b/Test/baseResults/spv.smBuiltins.vert.out @@ -0,0 +1,62 @@ +spv.smBuiltins.vert +// Module Version 10000 +// Generated by (magic number): 80007 +// Id's are bound by 29 + + Capability Shader + Capability ShaderSMBuiltinsNV + Extension "SPV_NV_shader_sm_builtins" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 15 18 20 22 24 + Source GLSL 450 + SourceExtension "GL_NV_shader_sm_builtins" + Name 4 "main" + Name 9 "Output" + MemberName 9(Output) 0 "result" + Name 11 "" + Name 15 "gl_VertexIndex" + Name 18 "gl_WarpsPerSMNV" + Name 20 "gl_SMCountNV" + Name 22 "gl_WarpIDNV" + Name 24 "gl_SMIDNV" + Decorate 8 ArrayStride 16 + MemberDecorate 9(Output) 0 Offset 0 + Decorate 9(Output) BufferBlock + Decorate 11 DescriptorSet 0 + Decorate 11 Binding 0 + Decorate 15(gl_VertexIndex) BuiltIn VertexIndex + Decorate 18(gl_WarpsPerSMNV) BuiltIn WarpsPerSMNV + Decorate 20(gl_SMCountNV) BuiltIn SMCountNV + Decorate 22(gl_WarpIDNV) BuiltIn WarpIDNV + Decorate 24(gl_SMIDNV) BuiltIn SMIDNV + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 4 + 8: TypeRuntimeArray 7(ivec4) + 9(Output): TypeStruct 8 + 10: TypePointer Uniform 9(Output) + 11: 10(ptr) Variable Uniform + 12: TypeInt 32 1 + 13: 12(int) Constant 0 + 14: TypePointer Input 12(int) +15(gl_VertexIndex): 14(ptr) Variable Input + 17: TypePointer Input 6(int) +18(gl_WarpsPerSMNV): 17(ptr) Variable Input +20(gl_SMCountNV): 17(ptr) Variable Input + 22(gl_WarpIDNV): 17(ptr) Variable Input + 24(gl_SMIDNV): 17(ptr) Variable Input + 27: TypePointer Uniform 7(ivec4) + 4(main): 2 Function None 3 + 5: Label + 16: 12(int) Load 15(gl_VertexIndex) + 19: 6(int) Load 18(gl_WarpsPerSMNV) + 21: 6(int) Load 20(gl_SMCountNV) + 23: 6(int) Load 22(gl_WarpIDNV) + 25: 6(int) Load 24(gl_SMIDNV) + 26: 7(ivec4) CompositeConstruct 19 21 23 25 + 28: 27(ptr) AccessChain 11 13 16 + Store 28 26 + Return + FunctionEnd diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out index 0d47dce7..931ba8d8 100644 --- a/Test/baseResults/spv.specConstant.vert.out +++ b/Test/baseResults/spv.specConstant.vert.out @@ -11,7 +11,7 @@ spv.specConstant.vert Source GLSL 400 Name 4 "main" Name 9 "arraySize" - Name 14 "foo(vf4[s2765];" + Name 14 "foo(vf4[s2769];" Name 13 "p" Name 17 "builtin_spec_constant(" Name 20 "color" @@ -102,10 +102,10 @@ spv.specConstant.vert Store 20(color) 46 48: 10 Load 22(ucol) Store 47(param) 48 - 49: 2 FunctionCall 14(foo(vf4[s2765];) 47(param) + 49: 2 FunctionCall 14(foo(vf4[s2769];) 47(param) Return FunctionEnd -14(foo(vf4[s2765];): 2 Function None 12 +14(foo(vf4[s2769];): 2 Function None 12 13(p): 11(ptr) FunctionParameter 15: Label 54: 24(ptr) AccessChain 53(dupUcol) 23 diff --git a/Test/glsl.450.subgroup.frag b/Test/glsl.450.subgroup.frag index 26011ed9..61cfc8fb 100644 --- a/Test/glsl.450.subgroup.frag +++ b/Test/glsl.450.subgroup.frag @@ -226,3 +226,23 @@ void partitioned_works(vec4 f4) subgroupPartitionedExclusiveXorNV(ballot, parti); } +// tests for NV_shader_sm_builtins +void sm_builtins_err() +{ + gl_WarpsPerSMNV; // ERROR, no extension + gl_SMCountNV; // ERROR, no extension + gl_WarpIDNV; // ERROR, no extension + gl_SMIDNV; // ERROR, no extension +} + +#ifdef GL_NV_shader_sm_builtins +#extension GL_NV_shader_sm_builtins : enable +#endif + +void sm_builtins() +{ + gl_WarpsPerSMNV; + gl_SMCountNV; + gl_WarpIDNV; + gl_SMIDNV; +} diff --git a/Test/glsl.450.subgroup.geom b/Test/glsl.450.subgroup.geom index affe0453..d5d2f25f 100644 --- a/Test/glsl.450.subgroup.geom +++ b/Test/glsl.450.subgroup.geom @@ -232,3 +232,23 @@ void partitioned_works(vec4 f4) subgroupPartitionedExclusiveXorNV(ballot, parti); } +// tests for NV_shader_sm_builtins +void sm_builtins_err() +{ + gl_WarpsPerSMNV; // ERROR, no extension + gl_SMCountNV; // ERROR, no extension + gl_WarpIDNV; // ERROR, no extension + gl_SMIDNV; // ERROR, no extension +} + +#ifdef GL_NV_shader_sm_builtins +#extension GL_NV_shader_sm_builtins : enable +#endif + +void sm_builtins() +{ + gl_WarpsPerSMNV; + gl_SMCountNV; + gl_WarpIDNV; + gl_SMIDNV; +} diff --git a/Test/glsl.450.subgroup.tesc b/Test/glsl.450.subgroup.tesc index a67af25b..92cb1aef 100644 --- a/Test/glsl.450.subgroup.tesc +++ b/Test/glsl.450.subgroup.tesc @@ -231,3 +231,23 @@ void partitioned_works(vec4 f4) subgroupPartitionedExclusiveXorNV(ballot, parti); } +// tests for NV_shader_sm_builtins +void sm_builtins_err() +{ + gl_WarpsPerSMNV; // ERROR, no extension + gl_SMCountNV; // ERROR, no extension + gl_WarpIDNV; // ERROR, no extension + gl_SMIDNV; // ERROR, no extension +} + +#ifdef GL_NV_shader_sm_builtins +#extension GL_NV_shader_sm_builtins : enable +#endif + +void sm_builtins() +{ + gl_WarpsPerSMNV; + gl_SMCountNV; + gl_WarpIDNV; + gl_SMIDNV; +} diff --git a/Test/glsl.450.subgroup.tese b/Test/glsl.450.subgroup.tese index ebfd1232..bfb2b72f 100644 --- a/Test/glsl.450.subgroup.tese +++ b/Test/glsl.450.subgroup.tese @@ -230,3 +230,24 @@ void partitioned_works(vec4 f4) subgroupPartitionedExclusiveOrNV(ballot, parti); subgroupPartitionedExclusiveXorNV(ballot, parti); } + +// tests for NV_shader_sm_builtins +void sm_builtins_err() +{ + gl_WarpsPerSMNV; // ERROR, no extension + gl_SMCountNV; // ERROR, no extension + gl_WarpIDNV; // ERROR, no extension + gl_SMIDNV; // ERROR, no extension +} + +#ifdef GL_NV_shader_sm_builtins +#extension GL_NV_shader_sm_builtins : enable +#endif + +void sm_builtins() +{ + gl_WarpsPerSMNV; + gl_SMCountNV; + gl_WarpIDNV; + gl_SMIDNV; +} diff --git a/Test/glsl.450.subgroup.vert b/Test/glsl.450.subgroup.vert index 0be08b52..110b1d0d 100644 --- a/Test/glsl.450.subgroup.vert +++ b/Test/glsl.450.subgroup.vert @@ -230,3 +230,24 @@ void partitioned_works(vec4 f4) subgroupPartitionedExclusiveXorNV(ballot, parti); } +// tests for NV_shader_sm_builtins +void sm_builtins_err() +{ + gl_WarpsPerSMNV; // ERROR, no extension + gl_SMCountNV; // ERROR, no extension + gl_WarpIDNV; // ERROR, no extension + gl_SMIDNV; // ERROR, no extension +} + +#ifdef GL_NV_shader_sm_builtins +#extension GL_NV_shader_sm_builtins : enable +#endif + +void sm_builtins() +{ + gl_WarpsPerSMNV; + gl_SMCountNV; + gl_WarpIDNV; + gl_SMIDNV; +} + diff --git a/Test/glsl.450.subgroupBasic.comp b/Test/glsl.450.subgroupBasic.comp index 1bcd4869..7b428789 100644 --- a/Test/glsl.450.subgroupBasic.comp +++ b/Test/glsl.450.subgroupBasic.comp @@ -236,3 +236,23 @@ void partitioned_works(vec4 f4) subgroupPartitionedExclusiveXorNV(ballot, parti); } +// tests for NV_shader_sm_builtins +void sm_builtins_err() +{ + gl_WarpsPerSMNV; // ERROR, no extension + gl_SMCountNV; // ERROR, no extension + gl_WarpIDNV; // ERROR, no extension + gl_SMIDNV; // ERROR, no extension +} + +#ifdef GL_NV_shader_sm_builtins +#extension GL_NV_shader_sm_builtins : enable +#endif + +void sm_builtins() +{ + gl_WarpsPerSMNV; + gl_SMCountNV; + gl_WarpIDNV; + gl_SMIDNV; +} diff --git a/Test/glsl.460.subgroup.mesh b/Test/glsl.460.subgroup.mesh index 19a47578..1071cac8 100644 --- a/Test/glsl.460.subgroup.mesh +++ b/Test/glsl.460.subgroup.mesh @@ -291,3 +291,24 @@ void partitioned_works(vec4 f4) subgroupPartitionedExclusiveOrNV(ballot, parti); subgroupPartitionedExclusiveXorNV(ballot, parti); } + +// tests for NV_shader_sm_builtins +void sm_builtins_err() +{ + gl_WarpsPerSMNV; // ERROR, no extension + gl_SMCountNV; // ERROR, no extension + gl_WarpIDNV; // ERROR, no extension + gl_SMIDNV; // ERROR, no extension +} + +#ifdef GL_NV_shader_sm_builtins +#extension GL_NV_shader_sm_builtins : enable +#endif + +void sm_builtins() +{ + gl_WarpsPerSMNV; + gl_SMCountNV; + gl_WarpIDNV; + gl_SMIDNV; +} diff --git a/Test/glsl.460.subgroup.rahit b/Test/glsl.460.subgroup.rahit index 3ee73785..a1bce287 100644 --- a/Test/glsl.460.subgroup.rahit +++ b/Test/glsl.460.subgroup.rahit @@ -253,3 +253,23 @@ void partitioned_works(vec4 f4) subgroupPartitionedExclusiveXorNV(ballot, parti); } +// tests for NV_shader_sm_builtins +void sm_builtins_err() +{ + gl_WarpsPerSMNV; // ERROR, no extension + gl_SMCountNV; // ERROR, no extension + gl_WarpIDNV; // ERROR, no extension + gl_SMIDNV; // ERROR, no extension +} + +#ifdef GL_NV_shader_sm_builtins +#extension GL_NV_shader_sm_builtins : enable +#endif + +void sm_builtins() +{ + gl_WarpsPerSMNV; + gl_SMCountNV; + gl_WarpIDNV; + gl_SMIDNV; +} diff --git a/Test/glsl.460.subgroup.rcall b/Test/glsl.460.subgroup.rcall index dc7ad2e6..9c2ede88 100644 --- a/Test/glsl.460.subgroup.rcall +++ b/Test/glsl.460.subgroup.rcall @@ -241,3 +241,23 @@ void partitioned_works(vec4 f4) subgroupPartitionedExclusiveXorNV(ballot, parti); } +// tests for NV_shader_sm_builtins +void sm_builtins_err() +{ + gl_WarpsPerSMNV; // ERROR, no extension + gl_SMCountNV; // ERROR, no extension + gl_WarpIDNV; // ERROR, no extension + gl_SMIDNV; // ERROR, no extension +} + +#ifdef GL_NV_shader_sm_builtins +#extension GL_NV_shader_sm_builtins : enable +#endif + +void sm_builtins() +{ + gl_WarpsPerSMNV; + gl_SMCountNV; + gl_WarpIDNV; + gl_SMIDNV; +} diff --git a/Test/glsl.460.subgroup.rchit b/Test/glsl.460.subgroup.rchit index cbe3517a..aae5b541 100644 --- a/Test/glsl.460.subgroup.rchit +++ b/Test/glsl.460.subgroup.rchit @@ -251,3 +251,23 @@ void partitioned_works(vec4 f4) subgroupPartitionedExclusiveXorNV(ballot, parti); } +// tests for NV_shader_sm_builtins +void sm_builtins_err() +{ + gl_WarpsPerSMNV; // ERROR, no extension + gl_SMCountNV; // ERROR, no extension + gl_WarpIDNV; // ERROR, no extension + gl_SMIDNV; // ERROR, no extension +} + +#ifdef GL_NV_shader_sm_builtins +#extension GL_NV_shader_sm_builtins : enable +#endif + +void sm_builtins() +{ + gl_WarpsPerSMNV; + gl_SMCountNV; + gl_WarpIDNV; + gl_SMIDNV; +} diff --git a/Test/glsl.460.subgroup.rgen b/Test/glsl.460.subgroup.rgen index 9184e15f..a3c78c95 100644 --- a/Test/glsl.460.subgroup.rgen +++ b/Test/glsl.460.subgroup.rgen @@ -245,3 +245,23 @@ void partitioned_works(vec4 f4) subgroupPartitionedExclusiveXorNV(ballot, parti); } +// tests for NV_shader_sm_builtins +void sm_builtins_err() +{ + gl_WarpsPerSMNV; // ERROR, no extension + gl_SMCountNV; // ERROR, no extension + gl_WarpIDNV; // ERROR, no extension + gl_SMIDNV; // ERROR, no extension +} + +#ifdef GL_NV_shader_sm_builtins +#extension GL_NV_shader_sm_builtins : enable +#endif + +void sm_builtins() +{ + gl_WarpsPerSMNV; + gl_SMCountNV; + gl_WarpIDNV; + gl_SMIDNV; +} diff --git a/Test/glsl.460.subgroup.rint b/Test/glsl.460.subgroup.rint index 7a58804a..1909c5af 100644 --- a/Test/glsl.460.subgroup.rint +++ b/Test/glsl.460.subgroup.rint @@ -251,3 +251,23 @@ void partitioned_works(vec4 f4) subgroupPartitionedExclusiveXorNV(ballot, parti); } +// tests for NV_shader_sm_builtins +void sm_builtins_err() +{ + gl_WarpsPerSMNV; // ERROR, no extension + gl_SMCountNV; // ERROR, no extension + gl_WarpIDNV; // ERROR, no extension + gl_SMIDNV; // ERROR, no extension +} + +#ifdef GL_NV_shader_sm_builtins +#extension GL_NV_shader_sm_builtins : enable +#endif + +void sm_builtins() +{ + gl_WarpsPerSMNV; + gl_SMCountNV; + gl_WarpIDNV; + gl_SMIDNV; +} diff --git a/Test/glsl.460.subgroup.rmiss b/Test/glsl.460.subgroup.rmiss index 4d629d67..96c44119 100644 --- a/Test/glsl.460.subgroup.rmiss +++ b/Test/glsl.460.subgroup.rmiss @@ -245,3 +245,23 @@ void partitioned_works(vec4 f4) subgroupPartitionedExclusiveXorNV(ballot, parti); } +// tests for NV_shader_sm_builtins +void sm_builtins_err() +{ + gl_WarpsPerSMNV; // ERROR, no extension + gl_SMCountNV; // ERROR, no extension + gl_WarpIDNV; // ERROR, no extension + gl_SMIDNV; // ERROR, no extension +} + +#ifdef GL_NV_shader_sm_builtins +#extension GL_NV_shader_sm_builtins : enable +#endif + +void sm_builtins() +{ + gl_WarpsPerSMNV; + gl_SMCountNV; + gl_WarpIDNV; + gl_SMIDNV; +} diff --git a/Test/glsl.460.subgroup.task b/Test/glsl.460.subgroup.task index 84d31405..9b147f80 100644 --- a/Test/glsl.460.subgroup.task +++ b/Test/glsl.460.subgroup.task @@ -282,3 +282,23 @@ void partitioned_works(vec4 f4) subgroupPartitionedExclusiveXorNV(ballot, parti); } +// tests for NV_shader_sm_builtins +void sm_builtins_err() +{ + gl_WarpsPerSMNV; // ERROR, no extension + gl_SMCountNV; // ERROR, no extension + gl_WarpIDNV; // ERROR, no extension + gl_SMIDNV; // ERROR, no extension +} + +#ifdef GL_NV_shader_sm_builtins +#extension GL_NV_shader_sm_builtins : enable +#endif + +void sm_builtins() +{ + gl_WarpsPerSMNV; + gl_SMCountNV; + gl_WarpIDNV; + gl_SMIDNV; +} diff --git a/Test/spv.smBuiltins.frag b/Test/spv.smBuiltins.frag new file mode 100644 index 00000000..b676e604 --- /dev/null +++ b/Test/spv.smBuiltins.frag @@ -0,0 +1,7 @@ +#version 450 +#extension GL_NV_shader_sm_builtins: enable +layout(location = 0) out uvec4 data; +void main (void) +{ + data = uvec4(gl_WarpsPerSMNV, gl_SMCountNV, gl_WarpIDNV, gl_SMIDNV); +} diff --git a/Test/spv.smBuiltins.vert b/Test/spv.smBuiltins.vert new file mode 100644 index 00000000..0b3db021 --- /dev/null +++ b/Test/spv.smBuiltins.vert @@ -0,0 +1,11 @@ +#version 450 +#extension GL_NV_shader_sm_builtins: enable +layout(set = 0, binding = 0, std430) buffer Output +{ + uvec4 result[]; +}; + +void main (void) +{ + result[gl_VertexIndex] = uvec4(gl_WarpsPerSMNV, gl_SMCountNV, gl_WarpIDNV, gl_SMIDNV); +} diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h index e4a4572b..1a99e1bb 100644 --- a/glslang/Include/BaseTypes.h +++ b/glslang/Include/BaseTypes.h @@ -275,6 +275,12 @@ enum TBuiltInVariable { EbvMeshViewIndicesNV, #endif + // sm builtins + EbvWarpsPerSM, + EbvSMCount, + EbvWarpID, + EbvSMID, + // HLSL built-ins that live only temporarily, until they get remapped // to one of the above. EbvFragDepthGreater, @@ -460,6 +466,11 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v) case EbvMeshViewIndicesNV: return "MeshViewIndicesNV"; #endif + case EbvWarpsPerSM: return "WarpsPerSMNV"; + case EbvSMCount: return "SMCountNV"; + case EbvWarpID: return "WarpIDNV"; + case EbvSMID: return "SMIDNV"; + default: return "unknown built-in variable"; } } diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 1cbf4db7..989c34a7 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -514,8 +514,9 @@ public: const char* semanticName; TStorageQualifier storage : 6; - TBuiltInVariable builtIn : 8; - TBuiltInVariable declaredBuiltIn : 8; + TBuiltInVariable builtIn : 9; + TBuiltInVariable declaredBuiltIn : 9; + static_assert(EbvLast < 256, "need to increase size of TBuiltInVariable bitfields!"); TPrecisionQualifier precision : 3; bool invariant : 1; // require canonical treatment for cross-shader invariance bool noContraction: 1; // prevent contraction and reassociation, e.g., for 'precise' keyword, and expressions it affects diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index ecaf7556..afaf2d6f 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -6141,6 +6141,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in highp uvec4 gl_SubgroupGtMask;" "in highp uvec4 gl_SubgroupLeMask;" "in highp uvec4 gl_SubgroupLtMask;" + // GL_NV_shader_sm_builtins + "in highp uint gl_WarpsPerSMNV;" + "in highp uint gl_SMCountNV;" + "in highp uint gl_WarpIDNV;" + "in highp uint gl_SMIDNV;" "\n"; const char* fragmentSubgroupDecls = "flat in mediump uint gl_SubgroupSize;" @@ -6150,6 +6155,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "flat in highp uvec4 gl_SubgroupGtMask;" "flat in highp uvec4 gl_SubgroupLeMask;" "flat in highp uvec4 gl_SubgroupLtMask;" + // GL_NV_shader_sm_builtins + "flat in highp uint gl_WarpsPerSMNV;" + "flat in highp uint gl_SMCountNV;" + "flat in highp uint gl_WarpIDNV;" + "flat in highp uint gl_SMIDNV;" "\n"; const char* computeSubgroupDecls = "in highp uint gl_NumSubgroups;" @@ -8181,6 +8191,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SubgroupGtMask", EbvSubgroupGtMask2, symbolTable); BuiltInVariable("gl_SubgroupLeMask", EbvSubgroupLeMask2, symbolTable); BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable); + + // GL_NV_shader_sm_builtins + symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins); + BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable); + BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable); + BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); + BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); } break; @@ -8582,6 +8602,15 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveXorNV", 1, &E_GL_NV_shader_subgroup_partitioned); #endif + // GL_NV_shader_sm_builtins + symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins); + BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable); + BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable); + BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); + BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); } if (profile == EEsProfile) { @@ -8686,6 +8715,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SubgroupGtMask", EbvSubgroupGtMask2, symbolTable); BuiltInVariable("gl_SubgroupLeMask", EbvSubgroupLeMask2, symbolTable); BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable); + + // GL_NV_shader_sm_builtins + symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins); + BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable); + BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable); + BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); + BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); } if ((profile != EEsProfile && version >= 140) || @@ -8800,6 +8839,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SubgroupGtMask", EbvSubgroupGtMask2, symbolTable); BuiltInVariable("gl_SubgroupLeMask", EbvSubgroupLeMask2, symbolTable); BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable); + + // GL_NV_shader_sm_builtins + symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins); + BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable); + BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable); + BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); + BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); } break; @@ -8934,6 +8983,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable); symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic); + + // GL_NV_shader_sm_builtins + symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins); + BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable); + BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable); + BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); + BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); } break; @@ -9024,6 +9083,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SubgroupLtMask", EbvSubgroupLtMask2, symbolTable); symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic); + + // GL_NV_shader_sm_builtins + symbolTable.setVariableExtensions("gl_WarpsPerSMNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_SMCountNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_WarpIDNV", 1, &E_GL_NV_shader_sm_builtins); + symbolTable.setVariableExtensions("gl_SMIDNV", 1, &E_GL_NV_shader_sm_builtins); + BuiltInVariable("gl_WarpsPerSMNV", EbvWarpsPerSM, symbolTable); + BuiltInVariable("gl_SMCountNV", EbvSMCount, symbolTable); + BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); + BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); } break; #endif diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 6c97da16..4054ac84 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -251,6 +251,7 @@ void TParseVersions::initializeExtensionBehavior() #endif extensionBehavior[E_GL_NV_cooperative_matrix] = EBhDisable; + extensionBehavior[E_GL_NV_shader_sm_builtins] = EBhDisable; // AEP extensionBehavior[E_GL_ANDROID_extension_pack_es31a] = EBhDisable; @@ -459,6 +460,7 @@ void TParseVersions::getPreamble(std::string& preamble) preamble += "#define GL_EXT_device_group 1\n" "#define GL_EXT_multiview 1\n" + "#define GL_NV_shader_sm_builtins 1\n" ; } diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 953d33a0..6c945029 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -228,6 +228,7 @@ const int Num_viewportEXTs = sizeof(viewportEXTs) / sizeof(viewportEXTs[0]); #endif const char* const E_GL_NV_cooperative_matrix = "GL_NV_cooperative_matrix"; +const char* const E_GL_NV_shader_sm_builtins = "GL_NV_shader_sm_builtins"; // AEP const char* const E_GL_ANDROID_extension_pack_es31a = "GL_ANDROID_extension_pack_es31a"; diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index ead5e6d2..e28f7aa6 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -410,6 +410,8 @@ INSTANTIATE_TEST_CASE_P( "spv.xfb2.vert", "spv.xfb3.vert", "spv.samplerlessTextureFunctions.frag", + "spv.smBuiltins.vert", + "spv.smBuiltins.frag", })), FileNameAsCustomTestSuffix ); diff --git a/known_good.json b/known_good.json index 9c2bb407..3053d1dd 100644 --- a/known_good.json +++ b/known_good.json @@ -5,7 +5,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "d01a3c3b4b76e942e1c22adca5a9713197dde901" + "commit" : "0755d6ce821cb1ca1e5a5bdf3a8d1d63b08da86d" }, { "name" : "spirv-tools/external/spirv-headers", From 4d8df4f636f6d8fdb6488d3053e99edf9527db69 Mon Sep 17 00:00:00 2001 From: Alan Baker Date: Thu, 13 Jun 2019 08:54:01 -0400 Subject: [PATCH 06/42] Update known good SPIRV-Tools --- known_good.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/known_good.json b/known_good.json index 3053d1dd..16716fd5 100644 --- a/known_good.json +++ b/known_good.json @@ -5,7 +5,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "0755d6ce821cb1ca1e5a5bdf3a8d1d63b08da86d" + "commit" : "b4bf7bcf0ad3a7eb6857e8d6d594e23f1be6f27a" }, { "name" : "spirv-tools/external/spirv-headers", From e86cc18e8c67721cf55880dbf454f1b1929816a9 Mon Sep 17 00:00:00 2001 From: Alan Baker Date: Thu, 13 Jun 2019 08:54:31 -0400 Subject: [PATCH 07/42] Update test expectations for new SPIRV-Tools --- Test/baseResults/spv.shaderBallot.comp.out | 1 + 1 file changed, 1 insertion(+) diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out index 2f0e5a0b..d25eec7e 100644 --- a/Test/baseResults/spv.shaderBallot.comp.out +++ b/Test/baseResults/spv.shaderBallot.comp.out @@ -1,4 +1,5 @@ spv.shaderBallot.comp +Validation failed // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 298 From 38a52fca935f9b4036b17957a25d023dfb521947 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Fri, 14 Jun 2019 09:56:28 -0500 Subject: [PATCH 08/42] Add gl_SemanticsVolatile to GL_KHR_memory_scope_semantics, and make volatile-qualified atomics generate MemorySemanticsVolatile when using the Vulkan memory model --- SPIRV/GlslangToSpv.cpp | 74 ++-- SPIRV/spirv.hpp | 4 +- .../spv.memoryScopeSemantics.comp.out | 378 +++++++++--------- .../spv.memoryScopeSemantics_Error.comp.out | 4 +- Test/spv.memoryScopeSemantics.comp | 6 + Test/spv.memoryScopeSemantics_Error.comp | 2 + glslang/MachineIndependent/Initialize.cpp | 2 + glslang/MachineIndependent/ParseHelper.cpp | 15 +- 8 files changed, 278 insertions(+), 207 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 312e06ad..9ad19b54 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -169,7 +169,7 @@ protected: void makeGlobalInitializers(const glslang::TIntermSequence&); void visitFunctions(const glslang::TIntermSequence&); void handleFunctionEntry(const glslang::TIntermAggregate* node); - void translateArguments(const glslang::TIntermAggregate& node, std::vector& arguments); + void translateArguments(const glslang::TIntermAggregate& node, std::vector& arguments, spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags); void translateArguments(glslang::TIntermUnary& node, std::vector& arguments); spv::Id createImageTextureFunctionCall(glslang::TIntermOperator* node); spv::Id handleUserFunctionCall(const glslang::TIntermAggregate*); @@ -178,14 +178,14 @@ protected: glslang::TBasicType typeProxy, bool reduceComparison = true); spv::Id createBinaryMatrixOperation(spv::Op, OpDecorations&, spv::Id typeId, spv::Id left, spv::Id right); spv::Id createUnaryOperation(glslang::TOperator op, OpDecorations&, spv::Id typeId, spv::Id operand, - glslang::TBasicType typeProxy); + glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags); spv::Id createUnaryMatrixOperation(spv::Op op, OpDecorations&, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy); spv::Id createConversion(glslang::TOperator op, OpDecorations&, spv::Id destTypeId, spv::Id operand, glslang::TBasicType typeProxy); spv::Id createIntWidthConversion(glslang::TOperator op, spv::Id operand, int vectorSize); spv::Id makeSmearedConstant(spv::Id constant, int vectorSize); - spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy); + spv::Id createAtomicOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags); spv::Id createInvocationsOperation(glslang::TOperator op, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy); spv::Id CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation, spv::Id typeId, std::vector& operands); spv::Id createSubgroupOperation(glslang::TOperator op, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy); @@ -1981,19 +1981,26 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI invertedType = getInvertedSwizzleType(*node->getOperand()); builder.clearAccessChain(); + TIntermNode *operandNode; if (invertedType != spv::NoType) - node->getOperand()->getAsBinaryNode()->getLeft()->traverse(this); + operandNode = node->getOperand()->getAsBinaryNode()->getLeft(); else - node->getOperand()->traverse(this); + operandNode = node->getOperand(); + + operandNode->traverse(this); spv::Id operand = spv::NoResult; + spv::Builder::AccessChain::CoherentFlags lvalueCoherentFlags; + if (node->getOp() == glslang::EOpAtomicCounterIncrement || node->getOp() == glslang::EOpAtomicCounterDecrement || node->getOp() == glslang::EOpAtomicCounter || - node->getOp() == glslang::EOpInterpolateAtCentroid) + node->getOp() == glslang::EOpInterpolateAtCentroid) { operand = builder.accessChainGetLValue(); // Special case l-value operands - else + lvalueCoherentFlags = builder.getAccessChain().coherentFlags; + lvalueCoherentFlags |= TranslateCoherent(operandNode->getAsTyped()->getType()); + } else operand = accessChainLoad(node->getOperand()->getType()); OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()), @@ -2006,7 +2013,7 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI // if not, then possibly an operation if (! result) - result = createUnaryOperation(node->getOp(), decorations, resultType(), operand, node->getOperand()->getBasicType()); + result = createUnaryOperation(node->getOp(), decorations, resultType(), operand, node->getOperand()->getBasicType(), lvalueCoherentFlags); if (result) { if (invertedType) { @@ -2113,6 +2120,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt bool noReturnValue = false; bool atomic = false; + spv::Builder::AccessChain::CoherentFlags lvalueCoherentFlags; + assert(node->getOp()); spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision()); @@ -2310,7 +2319,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt { builder.setLine(node->getLoc().line, node->getLoc().getFilename()); std::vector arguments; - translateArguments(*node, arguments); + translateArguments(*node, arguments, lvalueCoherentFlags); spv::Id constructed; if (node->getOp() == glslang::EOpConstructTextureSampler) constructed = builder.createOp(spv::OpSampledImage, resultType(), arguments); @@ -2602,9 +2611,11 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt } } - if (lvalue) + if (lvalue) { operands.push_back(builder.accessChainGetLValue()); - else { + lvalueCoherentFlags = builder.getAccessChain().coherentFlags; + lvalueCoherentFlags |= TranslateCoherent(glslangOperands[arg]->getAsTyped()->getType()); + } else { builder.setLine(node->getLoc().line, node->getLoc().getFilename()); operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType())); } @@ -2639,7 +2650,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt result = 0; } else if (atomic) { // Handle all atomics - result = createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType()); + result = createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType(), lvalueCoherentFlags); } else { // Pass through to generic operations. switch (glslangOperands.size()) { @@ -2654,7 +2665,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt result = createUnaryOperation( node->getOp(), decorations, resultType(), operands.front(), - glslangOperands[0]->getAsTyped()->getBasicType()); + glslangOperands[0]->getAsTyped()->getBasicType(), lvalueCoherentFlags); } break; default: @@ -4052,7 +4063,7 @@ void TGlslangToSpvTraverser::handleFunctionEntry(const glslang::TIntermAggregate builder.setBuildPoint(functionBlock); } -void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& node, std::vector& arguments) +void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& node, std::vector& arguments, spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags) { const glslang::TIntermSequence& glslangArguments = node.getSequence(); @@ -4210,9 +4221,11 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& break; } - if (lvalue) + if (lvalue) { arguments.push_back(builder.accessChainGetLValue()); - else + lvalueCoherentFlags = builder.getAccessChain().coherentFlags; + lvalueCoherentFlags |= TranslateCoherent(glslangArguments[i]->getAsTyped()->getType()); + } else arguments.push_back(accessChainLoad(glslangArguments[i]->getAsTyped()->getType())); } } @@ -4253,9 +4266,11 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO return spv::ImageOperandsMaskNone; }; + spv::Builder::AccessChain::CoherentFlags lvalueCoherentFlags; + std::vector arguments; if (node->getAsAggregate()) - translateArguments(*node->getAsAggregate(), arguments); + translateArguments(*node->getAsAggregate(), arguments, lvalueCoherentFlags); else translateArguments(*node->getAsUnaryNode(), arguments); spv::Decoration precision = TranslatePrecisionDecoration(node->getOperationPrecision()); @@ -4536,7 +4551,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO for (; opIt != arguments.end(); ++opIt) operands.push_back(*opIt); - return createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType()); + return createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType(), lvalueCoherentFlags); } } @@ -5292,7 +5307,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, OpDecora } spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDecorations& decorations, spv::Id typeId, - spv::Id operand, glslang::TBasicType typeProxy) + spv::Id operand, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags) { spv::Op unaryOp = spv::OpNop; int extBuiltins = -1; @@ -5563,7 +5578,7 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe // Handle all of the atomics in one place, in createAtomicOperation() std::vector operands; operands.push_back(operand); - return createAtomicOperation(op, decorations.precision, typeId, operands, typeProxy); + return createAtomicOperation(op, decorations.precision, typeId, operands, typeProxy, lvalueCoherentFlags); } case glslang::EOpBitFieldReverse: @@ -6171,7 +6186,7 @@ spv::Id TGlslangToSpvTraverser::makeSmearedConstant(spv::Id constant, int vector } // For glslang ops that map to SPV atomic opCodes -spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv::Decoration /*precision*/, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy) +spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv::Decoration /*precision*/, spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags) { spv::Op opCode = spv::OpNop; @@ -6257,7 +6272,7 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv scopeId = builder.makeUintConstant(spv::ScopeDevice); } // semantics default to relaxed - spv::Id semanticsId = builder.makeUintConstant(spv::MemorySemanticsMaskNone); + spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.volatil ? spv::MemorySemanticsVolatileMask : spv::MemorySemanticsMaskNone); spv::Id semanticsId2 = semanticsId; pointerId = operands[0]; @@ -6287,7 +6302,10 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv // Check for capabilities unsigned semanticsImmediate = builder.getConstantScalar(semanticsId) | builder.getConstantScalar(semanticsId2); - if (semanticsImmediate & (spv::MemorySemanticsMakeAvailableKHRMask | spv::MemorySemanticsMakeVisibleKHRMask | spv::MemorySemanticsOutputMemoryKHRMask)) { + if (semanticsImmediate & (spv::MemorySemanticsMakeAvailableKHRMask | + spv::MemorySemanticsMakeVisibleKHRMask | + spv::MemorySemanticsOutputMemoryKHRMask | + spv::MemorySemanticsVolatileMask)) { builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); } @@ -7229,7 +7247,10 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: unsigned int memoryScope = builder.getConstantScalar(operands[1]); unsigned int semantics = builder.getConstantScalar(operands[2]) | builder.getConstantScalar(operands[3]); builder.createControlBarrier((spv::Scope)executionScope, (spv::Scope)memoryScope, (spv::MemorySemanticsMask)semantics); - if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask | spv::MemorySemanticsMakeVisibleKHRMask | spv::MemorySemanticsOutputMemoryKHRMask)) { + if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask | + spv::MemorySemanticsMakeVisibleKHRMask | + spv::MemorySemanticsOutputMemoryKHRMask | + spv::MemorySemanticsVolatileMask)) { builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); } if (glslangIntermediate->usingVulkanMemoryModel() && (executionScope == spv::ScopeDevice || memoryScope == spv::ScopeDevice)) { @@ -7246,7 +7267,10 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: unsigned int memoryScope = builder.getConstantScalar(operands[0]); unsigned int semantics = builder.getConstantScalar(operands[1]) | builder.getConstantScalar(operands[2]); builder.createMemoryBarrier((spv::Scope)memoryScope, (spv::MemorySemanticsMask)semantics); - if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask | spv::MemorySemanticsMakeVisibleKHRMask | spv::MemorySemanticsOutputMemoryKHRMask)) { + if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask | + spv::MemorySemanticsMakeVisibleKHRMask | + spv::MemorySemanticsOutputMemoryKHRMask | + spv::MemorySemanticsVolatileMask)) { builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); } if (glslangIntermediate->usingVulkanMemoryModel() && memoryScope == spv::ScopeDevice) { diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index 03ba767c..bbaf47c4 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -632,6 +632,7 @@ enum MemorySemanticsShift { MemorySemanticsOutputMemoryKHRShift = 12, MemorySemanticsMakeAvailableKHRShift = 13, MemorySemanticsMakeVisibleKHRShift = 14, + MemorySemanticsVolatileShift = 15, MemorySemanticsMax = 0x7fffffff, }; @@ -649,7 +650,8 @@ enum MemorySemanticsMask { MemorySemanticsImageMemoryMask = 0x00000800, MemorySemanticsOutputMemoryKHRMask = 0x00001000, MemorySemanticsMakeAvailableKHRMask = 0x00002000, - MemorySemanticsMakeVisibleKHRMask = 0x00004000, + MemorySemanticsMakeVisibleKHRMask = 0x00004000, + MemorySemanticsVolatileMask = 0x00008000, }; enum MemoryAccessShift { diff --git a/Test/baseResults/spv.memoryScopeSemantics.comp.out b/Test/baseResults/spv.memoryScopeSemantics.comp.out index 9361e76e..8c4e5763 100644 --- a/Test/baseResults/spv.memoryScopeSemantics.comp.out +++ b/Test/baseResults/spv.memoryScopeSemantics.comp.out @@ -1,7 +1,7 @@ spv.memoryScopeSemantics.comp // Module Version 10300 // Generated by (magic number): 80007 -// Id's are bound by 148 +// Id's are bound by 163 Capability Shader Capability Int64 @@ -23,59 +23,66 @@ spv.memoryScopeSemantics.comp Name 23 "atomu" Name 24 "value" Name 36 "imagei" - Name 45 "imageu" - Name 65 "BufferU" - MemberName 65(BufferU) 0 "x" - Name 67 "bufferu" - Name 72 "y" - Name 77 "BufferI" - MemberName 77(BufferI) 0 "x" - Name 79 "bufferi" - Name 83 "A" - MemberName 83(A) 0 "x" - Name 84 "BufferJ" - MemberName 84(BufferJ) 0 "a" - Name 87 "bufferj" - Name 98 "BufferK" - MemberName 98(BufferK) 0 "x" - Name 100 "bufferk" - Name 110 "imagej" - Name 122 "samp" - Name 133 "atomu64" - Name 138 "atomi64" - Name 143 "BufferL" - MemberName 143(BufferL) 0 "x" - Name 145 "bufferl" + Name 46 "imageu" + Name 66 "BufferU" + MemberName 66(BufferU) 0 "x" + Name 68 "bufferu" + Name 73 "y" + Name 78 "BufferI" + MemberName 78(BufferI) 0 "x" + Name 80 "bufferi" + Name 84 "A" + MemberName 84(A) 0 "x" + Name 85 "BufferJ" + MemberName 85(BufferJ) 0 "a" + Name 88 "bufferj" + Name 99 "BufferK" + MemberName 99(BufferK) 0 "x" + Name 101 "bufferk" + Name 111 "imagej" + Name 123 "samp" + Name 134 "atomu64" + Name 139 "atomi64" + Name 144 "BufferL" + MemberName 144(BufferL) 0 "x" + Name 146 "bufferl" + Name 151 "BufferM" + MemberName 151(BufferM) 0 "x" + Name 153 "bufferm" Decorate 36(imagei) DescriptorSet 0 Decorate 36(imagei) Binding 1 - Decorate 45(imageu) DescriptorSet 0 - Decorate 45(imageu) Binding 0 - MemberDecorate 65(BufferU) 0 Offset 0 - Decorate 65(BufferU) Block - Decorate 67(bufferu) DescriptorSet 0 - Decorate 67(bufferu) Binding 2 - MemberDecorate 77(BufferI) 0 Offset 0 - Decorate 77(BufferI) Block - Decorate 79(bufferi) DescriptorSet 0 - Decorate 79(bufferi) Binding 3 - Decorate 82 ArrayStride 4 - MemberDecorate 83(A) 0 Offset 0 - MemberDecorate 84(BufferJ) 0 Offset 0 - Decorate 84(BufferJ) Block - Decorate 87(bufferj) DescriptorSet 0 - Decorate 87(bufferj) Binding 4 - MemberDecorate 98(BufferK) 0 Offset 0 - Decorate 98(BufferK) Block - Decorate 100(bufferk) DescriptorSet 0 - Decorate 100(bufferk) Binding 7 - Decorate 110(imagej) DescriptorSet 0 - Decorate 110(imagej) Binding 5 - Decorate 122(samp) DescriptorSet 0 - Decorate 122(samp) Binding 6 - MemberDecorate 143(BufferL) 0 Offset 0 - Decorate 143(BufferL) Block - Decorate 145(bufferl) DescriptorSet 0 - Decorate 145(bufferl) Binding 8 + Decorate 46(imageu) DescriptorSet 0 + Decorate 46(imageu) Binding 0 + MemberDecorate 66(BufferU) 0 Offset 0 + Decorate 66(BufferU) Block + Decorate 68(bufferu) DescriptorSet 0 + Decorate 68(bufferu) Binding 2 + MemberDecorate 78(BufferI) 0 Offset 0 + Decorate 78(BufferI) Block + Decorate 80(bufferi) DescriptorSet 0 + Decorate 80(bufferi) Binding 3 + Decorate 83 ArrayStride 4 + MemberDecorate 84(A) 0 Offset 0 + MemberDecorate 85(BufferJ) 0 Offset 0 + Decorate 85(BufferJ) Block + Decorate 88(bufferj) DescriptorSet 0 + Decorate 88(bufferj) Binding 4 + MemberDecorate 99(BufferK) 0 Offset 0 + Decorate 99(BufferK) Block + Decorate 101(bufferk) DescriptorSet 0 + Decorate 101(bufferk) Binding 7 + Decorate 111(imagej) DescriptorSet 0 + Decorate 111(imagej) Binding 5 + Decorate 123(samp) DescriptorSet 0 + Decorate 123(samp) Binding 6 + MemberDecorate 144(BufferL) 0 Offset 0 + Decorate 144(BufferL) Block + Decorate 146(bufferl) DescriptorSet 0 + Decorate 146(bufferl) Binding 8 + MemberDecorate 151(BufferM) 0 Offset 0 + Decorate 151(BufferM) Block + Decorate 153(bufferm) DescriptorSet 0 + Decorate 153(bufferm) Binding 9 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -106,67 +113,72 @@ spv.memoryScopeSemantics.comp 38: 6(int) Constant 0 39: 37(ivec2) ConstantComposite 38 38 40: TypePointer Image 6(int) - 43: TypeImage 15(int) 2D nonsampled format:R32ui - 44: TypePointer UniformConstant 43 - 45(imageu): 44(ptr) Variable UniformConstant - 46: 15(int) Constant 3 - 47: TypePointer Image 15(int) - 50: 15(int) Constant 4 - 52: 15(int) Constant 7 - 57: 6(int) Constant 7 - 61: 15(int) Constant 10 - 63: 15(int) Constant 322 - 65(BufferU): TypeStruct 15(int) - 66: TypePointer StorageBuffer 65(BufferU) - 67(bufferu): 66(ptr) Variable StorageBuffer - 68: TypePointer StorageBuffer 15(int) - 70: 15(int) Constant 1 - 77(BufferI): TypeStruct 15(int) - 78: TypePointer StorageBuffer 77(BufferI) - 79(bufferi): 78(ptr) Variable StorageBuffer - 82: TypeArray 15(int) 26 - 83(A): TypeStruct 82 - 84(BufferJ): TypeStruct 83(A) - 85: TypeArray 84(BufferJ) 26 - 86: TypePointer StorageBuffer 85 - 87(bufferj): 86(ptr) Variable StorageBuffer - 94: TypePointer StorageBuffer 83(A) - 98(BufferK): TypeStruct 15(int) - 99: TypePointer Uniform 98(BufferK) - 100(bufferk): 99(ptr) Variable Uniform - 101: TypePointer Uniform 15(int) - 106: TypeVector 6(int) 4 - 108: TypeArray 34 26 - 109: TypePointer UniformConstant 108 - 110(imagej): 109(ptr) Variable UniformConstant - 116: 106(ivec4) ConstantComposite 38 38 38 38 - 117: TypeFloat 32 - 118: TypeImage 117(float) 2D sampled format:Unknown - 119: TypeSampledImage 118 - 120: TypeArray 119 26 - 121: TypePointer UniformConstant 120 - 122(samp): 121(ptr) Variable UniformConstant - 123: TypePointer UniformConstant 119 - 126: TypeVector 117(float) 2 - 127: 117(float) Constant 0 - 128: 126(fvec2) ConstantComposite 127 127 - 129: TypeVector 117(float) 4 - 131: TypeInt 64 0 - 132: TypePointer Workgroup 131(int64_t) - 133(atomu64): 132(ptr) Variable Workgroup - 134:131(int64_t) Constant 7 0 - 136: TypeInt 64 1 - 137: TypePointer Workgroup 136(int64_t) - 138(atomi64): 137(ptr) Variable Workgroup - 139:136(int64_t) Constant 10 0 - 143(BufferL): TypeStruct 15(int) - 144: TypePointer StorageBuffer 143(BufferL) - 145(bufferl): 144(ptr) Variable StorageBuffer + 42: 15(int) Constant 32768 + 44: TypeImage 15(int) 2D nonsampled format:R32ui + 45: TypePointer UniformConstant 44 + 46(imageu): 45(ptr) Variable UniformConstant + 47: 15(int) Constant 3 + 48: TypePointer Image 15(int) + 51: 15(int) Constant 4 + 53: 15(int) Constant 7 + 58: 6(int) Constant 7 + 62: 15(int) Constant 10 + 64: 15(int) Constant 322 + 66(BufferU): TypeStruct 15(int) + 67: TypePointer StorageBuffer 66(BufferU) + 68(bufferu): 67(ptr) Variable StorageBuffer + 69: TypePointer StorageBuffer 15(int) + 71: 15(int) Constant 1 + 78(BufferI): TypeStruct 15(int) + 79: TypePointer StorageBuffer 78(BufferI) + 80(bufferi): 79(ptr) Variable StorageBuffer + 83: TypeArray 15(int) 26 + 84(A): TypeStruct 83 + 85(BufferJ): TypeStruct 84(A) + 86: TypeArray 85(BufferJ) 26 + 87: TypePointer StorageBuffer 86 + 88(bufferj): 87(ptr) Variable StorageBuffer + 95: TypePointer StorageBuffer 84(A) + 99(BufferK): TypeStruct 15(int) + 100: TypePointer Uniform 99(BufferK) + 101(bufferk): 100(ptr) Variable Uniform + 102: TypePointer Uniform 15(int) + 107: TypeVector 6(int) 4 + 109: TypeArray 34 26 + 110: TypePointer UniformConstant 109 + 111(imagej): 110(ptr) Variable UniformConstant + 117: 107(ivec4) ConstantComposite 38 38 38 38 + 118: TypeFloat 32 + 119: TypeImage 118(float) 2D sampled format:Unknown + 120: TypeSampledImage 119 + 121: TypeArray 120 26 + 122: TypePointer UniformConstant 121 + 123(samp): 122(ptr) Variable UniformConstant + 124: TypePointer UniformConstant 120 + 127: TypeVector 118(float) 2 + 128: 118(float) Constant 0 + 129: 127(fvec2) ConstantComposite 128 128 + 130: TypeVector 118(float) 4 + 132: TypeInt 64 0 + 133: TypePointer Workgroup 132(int64_t) + 134(atomu64): 133(ptr) Variable Workgroup + 135:132(int64_t) Constant 7 0 + 137: TypeInt 64 1 + 138: TypePointer Workgroup 137(int64_t) + 139(atomi64): 138(ptr) Variable Workgroup + 140:137(int64_t) Constant 10 0 + 144(BufferL): TypeStruct 15(int) + 145: TypePointer StorageBuffer 144(BufferL) + 146(bufferl): 145(ptr) Variable StorageBuffer + 151(BufferM): TypeStruct 15(int) + 152: TypePointer StorageBuffer 151(BufferM) + 153(bufferm): 152(ptr) Variable StorageBuffer + 161: 6(int) Constant 32768 4(main): 2 Function None 3 5: Label 8(origi): 7(ptr) Variable Function 21(origu): 20(ptr) Variable Function - 72(y): 20(ptr) Variable Function + 73(y): 20(ptr) Variable Function 19: 6(int) AtomicIAdd 10(atomi) 12 18 11 Store 8(origi) 19 25: 15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26 @@ -177,77 +189,87 @@ spv.memoryScopeSemantics.comp 32: 15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26 AtomicStore 23(atomu) 12 33 32 41: 40(ptr) ImageTexelPointer 36(imagei) 39 17 - 42: 6(int) AtomicLoad 41 12 30 - Store 8(origi) 42 - 48: 47(ptr) ImageTexelPointer 45(imageu) 39 17 - 49: 15(int) AtomicIAdd 48 12 30 46 - Store 21(origu) 49 - 51: 47(ptr) ImageTexelPointer 45(imageu) 39 17 - AtomicStore 51 12 33 50 - 53: 15(int) AtomicOr 23(atomu) 12 17 52 - Store 21(origu) 53 - 54: 15(int) AtomicXor 23(atomu) 12 17 52 + 43: 6(int) AtomicLoad 41 12 30 + Store 8(origi) 43 + 49: 48(ptr) ImageTexelPointer 46(imageu) 39 17 + 50: 15(int) AtomicIAdd 49 12 30 47 + Store 21(origu) 50 + 52: 48(ptr) ImageTexelPointer 46(imageu) 39 17 + AtomicStore 52 12 33 51 + 54: 15(int) AtomicOr 23(atomu) 12 17 53 Store 21(origu) 54 - 55: 15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26 - 56: 15(int) AtomicUMin 23(atomu) 12 17 55 - Store 21(origu) 56 - 58: 6(int) AtomicSMax 10(atomi) 12 17 57 - Store 8(origi) 58 - 59: 6(int) Load 8(origi) - 60: 6(int) AtomicExchange 10(atomi) 12 17 59 - Store 8(origi) 60 - 62: 15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26 - 64: 15(int) AtomicCompareExchange 23(atomu) 12 63 63 62 61 - Store 21(origu) 64 - 69: 68(ptr) AccessChain 67(bufferu) 38 - 71: 15(int) AtomicIAdd 69 12 18 70 + 55: 15(int) AtomicXor 23(atomu) 12 17 53 + Store 21(origu) 55 + 56: 15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26 + 57: 15(int) AtomicUMin 23(atomu) 12 17 56 + Store 21(origu) 57 + 59: 6(int) AtomicSMax 10(atomi) 12 17 58 + Store 8(origi) 59 + 60: 6(int) Load 8(origi) + 61: 6(int) AtomicExchange 10(atomi) 12 17 60 + Store 8(origi) 61 + 63: 15(int) Load 24(value) MakePointerVisibleKHR NonPrivatePointerKHR 26 + 65: 15(int) AtomicCompareExchange 23(atomu) 12 64 64 63 62 + Store 21(origu) 65 + 70: 69(ptr) AccessChain 68(bufferu) 38 + 72: 15(int) AtomicIAdd 70 12 18 71 MemoryBarrier 26 18 - ControlBarrier 26 26 63 + ControlBarrier 26 26 64 ControlBarrier 26 26 17 - 73: 68(ptr) AccessChain 67(bufferu) 38 - 74: 15(int) Load 73 MakePointerVisibleKHR NonPrivatePointerKHR 26 - Store 72(y) 74 - 75: 15(int) Load 72(y) - 76: 68(ptr) AccessChain 67(bufferu) 38 - Store 76 75 MakePointerAvailableKHR NonPrivatePointerKHR 26 - 80: 68(ptr) AccessChain 79(bufferi) 38 - 81: 15(int) Load 80 MakePointerVisibleKHR NonPrivatePointerKHR 16 - Store 72(y) 81 - 88: 68(ptr) AccessChain 87(bufferj) 38 38 38 12 - 89: 15(int) Load 88 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 16 - Store 72(y) 89 - 90: 15(int) Load 72(y) - 91: 68(ptr) AccessChain 79(bufferi) 38 - Store 91 90 MakePointerAvailableKHR NonPrivatePointerKHR 16 - 92: 15(int) Load 72(y) - 93: 68(ptr) AccessChain 87(bufferj) 38 38 38 12 - Store 93 92 Volatile MakePointerAvailableKHR NonPrivatePointerKHR 16 - 95: 94(ptr) AccessChain 87(bufferj) 12 38 - 96: 83(A) Load 95 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 16 - 97: 94(ptr) AccessChain 87(bufferj) 38 38 - Store 97 96 Volatile MakePointerAvailableKHR NonPrivatePointerKHR 16 - 102: 101(ptr) AccessChain 100(bufferk) 38 - 103: 15(int) Load 102 NonPrivatePointerKHR - 104: 68(ptr) AccessChain 79(bufferi) 38 - Store 104 103 MakePointerAvailableKHR NonPrivatePointerKHR 16 - 105: 34 Load 36(imagei) - 107: 106(ivec4) ImageRead 105 39 MakeTexelVisibleKHR NonPrivateTexelKHR VolatileTexelKHR 16 - 111: 35(ptr) AccessChain 110(imagej) 38 - 112: 34 Load 111 - 113: 106(ivec4) ImageRead 112 39 NonPrivateTexelKHR - 114: 35(ptr) AccessChain 110(imagej) 12 - 115: 34 Load 114 - ImageWrite 115 39 116 NonPrivateTexelKHR - 124: 123(ptr) AccessChain 122(samp) 38 - 125: 119 Load 124 - 130: 129(fvec4) ImageSampleExplicitLod 125 128 Lod NonPrivateTexelKHR 127 - 135:131(int64_t) AtomicUMax 133(atomu64) 12 17 134 - Store 133(atomu64) 135 MakePointerAvailableKHR NonPrivatePointerKHR 26 - 140:131(int64_t) Load 133(atomu64) MakePointerVisibleKHR NonPrivatePointerKHR 26 - 141:136(int64_t) Bitcast 140 - 142:136(int64_t) AtomicCompareExchange 138(atomi64) 12 63 63 141 139 - 146: 68(ptr) AccessChain 145(bufferl) 38 - 147: 15(int) Load 146 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 16 - Store 72(y) 147 + 74: 69(ptr) AccessChain 68(bufferu) 38 + 75: 15(int) Load 74 MakePointerVisibleKHR NonPrivatePointerKHR 26 + Store 73(y) 75 + 76: 15(int) Load 73(y) + 77: 69(ptr) AccessChain 68(bufferu) 38 + Store 77 76 MakePointerAvailableKHR NonPrivatePointerKHR 26 + 81: 69(ptr) AccessChain 80(bufferi) 38 + 82: 15(int) Load 81 MakePointerVisibleKHR NonPrivatePointerKHR 16 + Store 73(y) 82 + 89: 69(ptr) AccessChain 88(bufferj) 38 38 38 12 + 90: 15(int) Load 89 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 16 + Store 73(y) 90 + 91: 15(int) Load 73(y) + 92: 69(ptr) AccessChain 80(bufferi) 38 + Store 92 91 MakePointerAvailableKHR NonPrivatePointerKHR 16 + 93: 15(int) Load 73(y) + 94: 69(ptr) AccessChain 88(bufferj) 38 38 38 12 + Store 94 93 Volatile MakePointerAvailableKHR NonPrivatePointerKHR 16 + 96: 95(ptr) AccessChain 88(bufferj) 12 38 + 97: 84(A) Load 96 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 16 + 98: 95(ptr) AccessChain 88(bufferj) 38 38 + Store 98 97 Volatile MakePointerAvailableKHR NonPrivatePointerKHR 16 + 103: 102(ptr) AccessChain 101(bufferk) 38 + 104: 15(int) Load 103 NonPrivatePointerKHR + 105: 69(ptr) AccessChain 80(bufferi) 38 + Store 105 104 MakePointerAvailableKHR NonPrivatePointerKHR 16 + 106: 34 Load 36(imagei) + 108: 107(ivec4) ImageRead 106 39 MakeTexelVisibleKHR NonPrivateTexelKHR VolatileTexelKHR 16 + 112: 35(ptr) AccessChain 111(imagej) 38 + 113: 34 Load 112 + 114: 107(ivec4) ImageRead 113 39 NonPrivateTexelKHR + 115: 35(ptr) AccessChain 111(imagej) 12 + 116: 34 Load 115 + ImageWrite 116 39 117 NonPrivateTexelKHR + 125: 124(ptr) AccessChain 123(samp) 38 + 126: 120 Load 125 + 131: 130(fvec4) ImageSampleExplicitLod 126 129 Lod NonPrivateTexelKHR 128 + 136:132(int64_t) AtomicUMax 134(atomu64) 12 17 135 + Store 134(atomu64) 136 MakePointerAvailableKHR NonPrivatePointerKHR 26 + 141:132(int64_t) Load 134(atomu64) MakePointerVisibleKHR NonPrivatePointerKHR 26 + 142:137(int64_t) Bitcast 141 + 143:137(int64_t) AtomicCompareExchange 139(atomi64) 12 64 64 142 140 + 147: 69(ptr) AccessChain 146(bufferl) 38 + 148: 15(int) Load 147 Volatile MakePointerVisibleKHR NonPrivatePointerKHR 16 + Store 73(y) 148 + 149: 69(ptr) AccessChain 146(bufferl) 38 + 150: 15(int) AtomicIAdd 149 16 42 71 + 154: 69(ptr) AccessChain 153(bufferm) 38 + 155: 15(int) AtomicOr 154 16 42 26 + 156: 40(ptr) ImageTexelPointer 36(imagei) 39 17 + 157: 6(int) AtomicIAdd 156 16 42 11 + 158: 69(ptr) AccessChain 68(bufferu) 38 + 159: 15(int) AtomicIAdd 158 12 17 51 + 160: 69(ptr) AccessChain 68(bufferu) 38 + 162: 15(int) AtomicIAdd 160 12 42 16 Return FunctionEnd diff --git a/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out b/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out index c4149d87..6de93fde 100644 --- a/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out +++ b/Test/baseResults/spv.memoryScopeSemantics_Error.comp.out @@ -11,7 +11,9 @@ ERROR: 0:23: 'atomicAdd' : Semantics must not include multiple of gl_SemanticsRe ERROR: 0:24: 'atomicCompSwap' : semUnequal must not be gl_SemanticsRelease or gl_SemanticsAcquireRelease ERROR: 0:25: 'memoryBarrier' : gl_SemanticsMakeVisible requires gl_SemanticsAcquire or gl_SemanticsAcquireRelease ERROR: 0:26: 'memoryBarrier' : gl_SemanticsMakeAvailable requires gl_SemanticsRelease or gl_SemanticsAcquireRelease -ERROR: 12 compilation errors. No code generated. +ERROR: 0:27: 'memoryBarrier' : gl_SemanticsVolatile must not be used with memoryBarrier or controlBarrier +ERROR: 0:28: 'atomicCompSwap' : semEqual and semUnequal must either both include gl_SemanticsVolatile or neither +ERROR: 14 compilation errors. No code generated. SPIR-V is not generated for failed compile or link diff --git a/Test/spv.memoryScopeSemantics.comp b/Test/spv.memoryScopeSemantics.comp index 88f54819..037e6d7b 100644 --- a/Test/spv.memoryScopeSemantics.comp +++ b/Test/spv.memoryScopeSemantics.comp @@ -19,6 +19,7 @@ layout (binding = 7) nonprivate uniform BufferK { uint x; } bufferk; shared uint64_t atomu64; shared int64_t atomi64; layout (binding = 8) volatile buffer BufferL { uint x; } bufferl; +layout (binding = 9) buffer BufferM { volatile uint x; } bufferm; void main() @@ -60,5 +61,10 @@ void main() atomicCompSwap(atomi64, int64_t(10), int64_t(atomu64), gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire); y = bufferl.x; + atomicAdd(bufferl.x, 1); + atomicOr(bufferm.x, 2); + imageAtomicAdd(imagei, ivec2(0,0), 3); + atomicAdd(bufferu.x, 4u, gl_ScopeDevice, 0, 0); + atomicAdd(bufferu.x, 5u, gl_ScopeDevice, 0, gl_SemanticsVolatile); } diff --git a/Test/spv.memoryScopeSemantics_Error.comp b/Test/spv.memoryScopeSemantics_Error.comp index 4e18b2e0..1b856717 100644 --- a/Test/spv.memoryScopeSemantics_Error.comp +++ b/Test/spv.memoryScopeSemantics_Error.comp @@ -24,5 +24,7 @@ void main() uint origu = atomicCompSwap(atomu, 10u, value, gl_ScopeDevice, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquire, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease); memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsMakeVisible); memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeAvailable); + memoryBarrier(gl_ScopeWorkgroup, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsVolatile); + atomicCompSwap(bufferi.x, 10u, 10u, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsVolatile, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); } diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index afaf2d6f..169fef03 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -6309,6 +6309,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV commonBuiltins.append("const int gl_SemanticsAcquireRelease = 0x8;\n"); commonBuiltins.append("const int gl_SemanticsMakeAvailable = 0x2000;\n"); commonBuiltins.append("const int gl_SemanticsMakeVisible = 0x4000;\n"); + commonBuiltins.append("const int gl_SemanticsVolatile = 0x8000;\n"); commonBuiltins.append("const int gl_StorageSemanticsNone = 0x0;\n"); commonBuiltins.append("const int gl_StorageSemanticsBuffer = 0x40;\n"); @@ -8630,6 +8631,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_SemanticsAcquireRelease", 1, &E_GL_KHR_memory_scope_semantics); symbolTable.setVariableExtensions("gl_SemanticsMakeAvailable", 1, &E_GL_KHR_memory_scope_semantics); symbolTable.setVariableExtensions("gl_SemanticsMakeVisible", 1, &E_GL_KHR_memory_scope_semantics); + symbolTable.setVariableExtensions("gl_SemanticsVolatile", 1, &E_GL_KHR_memory_scope_semantics); symbolTable.setVariableExtensions("gl_StorageSemanticsNone", 1, &E_GL_KHR_memory_scope_semantics); symbolTable.setVariableExtensions("gl_StorageSemanticsBuffer", 1, &E_GL_KHR_memory_scope_semantics); diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 8e570ae0..57cc5f9d 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -1641,6 +1641,7 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& const int gl_SemanticsAcquireRelease = 0x8; const int gl_SemanticsMakeAvailable = 0x2000; const int gl_SemanticsMakeVisible = 0x4000; + const int gl_SemanticsVolatile = 0x8000; //const int gl_StorageSemanticsNone = 0x0; const int gl_StorageSemanticsBuffer = 0x40; @@ -1730,7 +1731,8 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& gl_SemanticsRelease | gl_SemanticsAcquireRelease | gl_SemanticsMakeAvailable | - gl_SemanticsMakeVisible))) { + gl_SemanticsMakeVisible | + gl_SemanticsVolatile))) { error(loc, "Invalid semantics value", fnCandidate.getName().c_str(), ""); } if (((storageClassSemantics | storageClassSemantics2) & ~(gl_StorageSemanticsBuffer | @@ -1782,7 +1784,16 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& error(loc, "gl_SemanticsMakeVisible requires gl_SemanticsAcquire or gl_SemanticsAcquireRelease", fnCandidate.getName().c_str(), ""); } - + if ((semantics & gl_SemanticsVolatile) && + (callNode.getOp() == EOpMemoryBarrier || callNode.getOp() == EOpBarrier)) { + error(loc, "gl_SemanticsVolatile must not be used with memoryBarrier or controlBarrier", + fnCandidate.getName().c_str(), ""); + } + if ((callNode.getOp() == EOpAtomicCompSwap || callNode.getOp() == EOpImageAtomicCompSwap) && + ((semantics ^ semantics2) & gl_SemanticsVolatile)) { + error(loc, "semEqual and semUnequal must either both include gl_SemanticsVolatile or neither", + fnCandidate.getName().c_str(), ""); + } } From dbe6b06dde29718ff737dd3893c9976bd8661329 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20Iglesias=20Gons=C3=A1lvez?= Date: Wed, 12 Jun 2019 16:42:43 +0200 Subject: [PATCH 09/42] Add missing GL_ARB_shader_ballot builtins to Geometry and Tessellation shaders MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When processing Geometry and Tessellation Control/Evaluation shaders, the builtins defined by GL_ARB_shader_ballot were not processed by glslang. This specially a problem for gl_SubGroupSizeARB because, it is treated as shader input instead of uniform on Vulkan. Signed-off-by: Samuel Iglesias Gonsálvez --- glslang/MachineIndependent/Initialize.cpp | 36 ++++++++++++++--------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 16a2e1af..4231dc60 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -7885,19 +7885,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("readInvocationARB", 1, &E_GL_ARB_shader_ballot); symbolTable.setFunctionExtensions("readFirstInvocationARB", 1, &E_GL_ARB_shader_ballot); - BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable); - BuiltInVariable("gl_SubGroupEqMaskARB", EbvSubGroupEqMask, symbolTable); - BuiltInVariable("gl_SubGroupGeMaskARB", EbvSubGroupGeMask, symbolTable); - BuiltInVariable("gl_SubGroupGtMaskARB", EbvSubGroupGtMask, symbolTable); - BuiltInVariable("gl_SubGroupLeMaskARB", EbvSubGroupLeMask, symbolTable); - BuiltInVariable("gl_SubGroupLtMaskARB", EbvSubGroupLtMask, symbolTable); - - if (spvVersion.vulkan > 0) - // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan - SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable); - else - BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable); - if (version >= 430) { symbolTable.setFunctionExtensions("anyInvocationARB", 1, &E_GL_ARB_shader_group_vote); symbolTable.setFunctionExtensions("allInvocationsARB", 1, &E_GL_ARB_shader_group_vote); @@ -8158,7 +8145,28 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview); BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable); } - + + if (profile != EEsProfile) { + BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable); + BuiltInVariable("gl_SubGroupEqMaskARB", EbvSubGroupEqMask, symbolTable); + BuiltInVariable("gl_SubGroupGeMaskARB", EbvSubGroupGeMask, symbolTable); + BuiltInVariable("gl_SubGroupGtMaskARB", EbvSubGroupGtMask, symbolTable); + BuiltInVariable("gl_SubGroupLeMaskARB", EbvSubGroupLeMask, symbolTable); + BuiltInVariable("gl_SubGroupLtMaskARB", EbvSubGroupLtMask, symbolTable); + + if (spvVersion.vulkan > 0) + // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan + SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable); + else + BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable); + } + + if (spvVersion.vulkan > 0) + // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan + SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable); + else + BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable); + // GL_KHR_shader_subgroup if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 140)) { From 2cfde2bdbe6feaf1b40b35cc147eef183023e322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20Iglesias=20Gons=C3=A1lvez?= Date: Mon, 17 Jun 2019 15:44:13 +0200 Subject: [PATCH 10/42] Delete duplicated gl_SubGroupSizeARB builtin treatment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Samuel Iglesias Gonsálvez --- glslang/MachineIndependent/Initialize.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index ba79e186..fc362e0c 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -8176,12 +8176,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable); } - if (spvVersion.vulkan > 0) - // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan - SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable); - else - BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable); - // GL_KHR_shader_subgroup if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 140)) { From d579c0a7d45aab62c858b832084f0c9ce2ffee7d Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Mon, 17 Jun 2019 22:33:11 -0600 Subject: [PATCH 11/42] Bump revision. --- 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 dd6c8da0..bbcbba4b 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 3226 +#define GLSLANG_PATCH_LEVEL 3269 From 605afc7b1b80ca82418c7b09d76eeaf429454cef Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Mon, 17 Jun 2019 23:33:09 -0600 Subject: [PATCH 12/42] SPV: Add a switch for favoring non-NaN operands in min, max, and clamp. --- SPIRV/GlslangToSpv.cpp | 10 +- SPIRV/disassemble.cpp | 3 + StandAlone/StandAlone.cpp | 8 +- Test/baseResults/spv.400.frag.nanclamp.out | 1402 +++++++++++++++++ Test/runtests | 7 + glslang/MachineIndependent/ShaderLang.cpp | 1 + .../MachineIndependent/localintermediate.h | 7 +- glslang/Public/ShaderLang.h | 1 + 8 files changed, 1433 insertions(+), 6 deletions(-) create mode 100644 Test/baseResults/spv.400.frag.nanclamp.out diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 9ad19b54..3633c5b8 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -224,6 +224,7 @@ protected: bool linkageOnly; // true when visiting the set of objects in the AST present only for establishing interface, whether or not they were statically used std::set iOSet; // all input/output variables from either static use or declaration of interface const glslang::TIntermediate* glslangIntermediate; + bool nanMinMaxClamp; // true if use NMin/NMax/NClamp instead of FMin/FMax/FClamp spv::Id stdBuiltins; std::unordered_map extBuiltinMap; @@ -1313,7 +1314,8 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, const gl sequenceDepth(0), logger(buildLogger), builder(spvVersion, (glslang::GetKhronosToolId() << 16) | glslang::GetSpirvGeneratorVersion(), logger), inEntryPoint(false), entryPointTerminated(false), linkageOnly(false), - glslangIntermediate(glslangIntermediate) + glslangIntermediate(glslangIntermediate), + nanMinMaxClamp(glslangIntermediate->getNanMinMaxClamp()) { spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage()); @@ -6997,7 +6999,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: switch (op) { case glslang::EOpMin: if (isFloat) - libCall = spv::GLSLstd450FMin; + libCall = nanMinMaxClamp ? spv::GLSLstd450NMin : spv::GLSLstd450FMin; else if (isUnsigned) libCall = spv::GLSLstd450UMin; else @@ -7009,7 +7011,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: break; case glslang::EOpMax: if (isFloat) - libCall = spv::GLSLstd450FMax; + libCall = nanMinMaxClamp ? spv::GLSLstd450NMax : spv::GLSLstd450FMax; else if (isUnsigned) libCall = spv::GLSLstd450UMax; else @@ -7028,7 +7030,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: case glslang::EOpClamp: if (isFloat) - libCall = spv::GLSLstd450FClamp; + libCall = nanMinMaxClamp ? spv::GLSLstd450NClamp : spv::GLSLstd450FClamp; else if (isUnsigned) libCall = spv::GLSLstd450UClamp; else diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp index 302f2124..3269f97e 100644 --- a/SPIRV/disassemble.cpp +++ b/SPIRV/disassemble.cpp @@ -648,6 +648,9 @@ static void GLSLstd450GetDebugNames(const char** names) names[GLSLstd450InterpolateAtCentroid] = "InterpolateAtCentroid"; names[GLSLstd450InterpolateAtSample] = "InterpolateAtSample"; names[GLSLstd450InterpolateAtOffset] = "InterpolateAtOffset"; + names[GLSLstd450NMin] = "NMin"; + names[GLSLstd450NMax] = "NMax"; + names[GLSLstd450NClamp] = "NClamp"; } #ifdef AMD_EXTENSIONS diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index b7c43877..9af2596c 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -104,6 +104,7 @@ enum TOptions { bool targetHlslFunctionality1 = false; bool SpvToolsDisassembler = false; bool SpvToolsValidate = false; +bool NaNClamp = false; // // Return codes from main/exit(). @@ -522,6 +523,8 @@ void ProcessArguments(std::vector>& workItem } else if (lowerword == "keep-uncalled" || // synonyms lowerword == "ku") { Options |= EOptionKeepUncalled; + } else if (lowerword == "nan-clamp") { + NaNClamp = true; } else if (lowerword == "no-storage-format" || // synonyms lowerword == "nsf") { Options |= EOptionNoStorageFormat; @@ -981,6 +984,7 @@ void CompileAndLinkShaderUnits(std::vector compUnits) shader->setFlattenUniformArrays((Options & EOptionFlattenUniformArrays) != 0); shader->setNoStorageFormat((Options & EOptionNoStorageFormat) != 0); + shader->setNanMinMaxClamp(NaNClamp); shader->setResourceSetBinding(baseResourceSetBinding[compUnit.stage]); if (Options & EOptionHlslIoMapping) @@ -1533,9 +1537,11 @@ void usage() " works independently of source language\n" " --hlsl-iomap perform IO mapping in HLSL register space\n" " --hlsl-enable-16bit-types allow 16-bit types in SPIR-V for HLSL\n" - " --hlsl-dx9-compatible interprets sampler declarations as a texture/sampler combo like DirectX9 would." + " --hlsl-dx9-compatible interprets sampler declarations as a\n" + " texture/sampler combo like DirectX9 would.\n" " --invert-y | --iy invert position.Y output in vertex shader\n" " --keep-uncalled | --ku don't eliminate uncalled functions\n" + " --nan-clamp favor non-NaN operand in min, max, and clamp\n" " --no-storage-format | --nsf use Unknown image format\n" " --reflect-strict-array-suffix use strict array suffix rules when\n" " reflecting\n" diff --git a/Test/baseResults/spv.400.frag.nanclamp.out b/Test/baseResults/spv.400.frag.nanclamp.out new file mode 100644 index 00000000..5305ee4c --- /dev/null +++ b/Test/baseResults/spv.400.frag.nanclamp.out @@ -0,0 +1,1402 @@ +spv.400.frag +// Module Version 10000 +// Generated by (magic number): 80007 +// Id's are bound by 1118 + + Capability Shader + Capability Geometry + Capability Float64 + Capability ImageGatherExtended + Capability ClipDistance + Capability SampledRect + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 13 1027 1033 1038 1050 1076 1097 1099 1105 1107 1116 + ExecutionMode 4 OriginUpperLeft + Source GLSL 400 + SourceExtension "GL_ARB_separate_shader_objects" + Name 4 "main" + Name 6 "foo23(" + Name 8 "doubles(" + Name 13 "outp" + Name 17 "u2drs" + Name 41 "doublev" + Name 45 "dvec2v" + Name 50 "dvec3v" + Name 55 "dvec4v" + Name 430 "boolv" + Name 439 "bvec2v" + Name 448 "bvec3v" + Name 457 "bvec4v" + Name 739 "dmat2v" + Name 745 "dmat3v" + Name 751 "dmat4v" + Name 757 "dmat2x3v" + Name 763 "dmat3x2v" + Name 769 "dmat2x4v" + Name 775 "dmat4x2v" + Name 781 "dmat3x4v" + Name 787 "dmat4x3v" + Name 1019 "v" + Name 1025 "arrayedSampler" + Name 1027 "i" + Name 1033 "c2D" + Name 1038 "gl_ClipDistance" + Name 1050 "uoutp" + Name 1054 "samp2dr" + Name 1076 "ioutp" + Name 1080 "isamp2DA" + Name 1097 "gl_FragCoord" + Name 1099 "vl2" + Name 1105 "uo" + Name 1107 "u" + Name 1115 "id" + Name 1116 "gl_PrimitiveID" + Decorate 13(outp) Location 1 + Decorate 17(u2drs) DescriptorSet 0 + Decorate 17(u2drs) Binding 3 + Decorate 1025(arrayedSampler) DescriptorSet 0 + Decorate 1025(arrayedSampler) Binding 0 + Decorate 1027(i) Flat + Decorate 1027(i) Location 1 + Decorate 1033(c2D) Location 0 + Decorate 1038(gl_ClipDistance) BuiltIn ClipDistance + Decorate 1050(uoutp) Location 3 + Decorate 1054(samp2dr) DescriptorSet 0 + Decorate 1054(samp2dr) Binding 1 + Decorate 1076(ioutp) Location 2 + Decorate 1080(isamp2DA) DescriptorSet 0 + Decorate 1080(isamp2DA) Binding 2 + Decorate 1097(gl_FragCoord) BuiltIn FragCoord + Decorate 1099(vl2) Location 6 + Decorate 1105(uo) Location 0 + Decorate 1107(u) Flat + Decorate 1107(u) Location 2 + Decorate 1116(gl_PrimitiveID) Flat + Decorate 1116(gl_PrimitiveID) BuiltIn PrimitiveId + 2: TypeVoid + 3: TypeFunction 2 + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypePointer Output 11(fvec4) + 13(outp): 12(ptr) Variable Output + 14: TypeImage 10(float) Rect depth sampled format:Unknown + 15: TypeSampledImage 14 + 16: TypePointer UniformConstant 15 + 17(u2drs): 16(ptr) Variable UniformConstant + 20: TypeVector 10(float) 2 + 21: 10(float) Constant 0 + 22: 20(fvec2) ConstantComposite 21 21 + 23: TypeInt 32 1 + 24: TypeVector 23(int) 2 + 25: 23(int) Constant 3 + 26: 23(int) Constant 4 + 27: 24(ivec2) ConstantComposite 25 26 + 32: TypeInt 32 0 + 33: 32(int) Constant 0 + 34: TypePointer Output 10(float) + 39: TypeFloat 64 + 40: TypePointer Function 39(float64_t) + 42:39(float64_t) Constant 2507418074 1073430332 + 43: TypeVector 39(float64_t) 2 + 44: TypePointer Function 43(f64vec2) + 46:39(float64_t) Constant 796182188 1073367658 + 47: 43(f64vec2) ConstantComposite 46 46 + 48: TypeVector 39(float64_t) 3 + 49: TypePointer Function 48(f64vec3) + 51:39(float64_t) Constant 1719614413 1073127582 + 52: 48(f64vec3) ConstantComposite 51 51 51 + 53: TypeVector 39(float64_t) 4 + 54: TypePointer Function 53(f64vec4) + 428: TypeBool + 429: TypePointer Function 428(bool) + 437: TypeVector 428(bool) 2 + 438: TypePointer Function 437(bvec2) + 446: TypeVector 428(bool) 3 + 447: TypePointer Function 446(bvec3) + 455: TypeVector 428(bool) 4 + 456: TypePointer Function 455(bvec4) + 563: 428(bool) ConstantFalse + 572: 437(bvec2) ConstantComposite 563 563 + 581: 446(bvec3) ConstantComposite 563 563 563 + 590: 455(bvec4) ConstantComposite 563 563 563 563 + 737: TypeMatrix 43(f64vec2) 2 + 738: TypePointer Function 737 + 743: TypeMatrix 48(f64vec3) 3 + 744: TypePointer Function 743 + 749: TypeMatrix 53(f64vec4) 4 + 750: TypePointer Function 749 + 755: TypeMatrix 48(f64vec3) 2 + 756: TypePointer Function 755 + 761: TypeMatrix 43(f64vec2) 3 + 762: TypePointer Function 761 + 767: TypeMatrix 53(f64vec4) 2 + 768: TypePointer Function 767 + 773: TypeMatrix 43(f64vec2) 4 + 774: TypePointer Function 773 + 779: TypeMatrix 53(f64vec4) 3 + 780: TypePointer Function 779 + 785: TypeMatrix 48(f64vec3) 4 + 786: TypePointer Function 785 + 954: 32(int) Constant 1 + 958: 32(int) Constant 2 + 962: 32(int) Constant 3 + 966: 23(int) Constant 1 + 970: 23(int) Constant 2 + 996: 10(float) Constant 1065353216 + 1018: TypePointer Function 11(fvec4) + 1020: TypeImage 10(float) 2D sampled format:Unknown + 1021: TypeSampledImage 1020 + 1022: 32(int) Constant 5 + 1023: TypeArray 1021 1022 + 1024: TypePointer UniformConstant 1023 +1025(arrayedSampler): 1024(ptr) Variable UniformConstant + 1026: TypePointer Input 23(int) + 1027(i): 1026(ptr) Variable Input + 1029: TypePointer UniformConstant 1021 + 1032: TypePointer Input 20(fvec2) + 1033(c2D): 1032(ptr) Variable Input + 1036: TypeArray 10(float) 958 + 1037: TypePointer Input 1036 +1038(gl_ClipDistance): 1037(ptr) Variable Input + 1039: TypePointer Input 10(float) + 1043: TypeVector 10(float) 3 + 1048: TypeVector 32(int) 4 + 1049: TypePointer Output 1048(ivec4) + 1050(uoutp): 1049(ptr) Variable Output + 1051: TypeImage 32(int) Rect sampled format:Unknown + 1052: TypeSampledImage 1051 + 1053: TypePointer UniformConstant 1052 + 1054(samp2dr): 1053(ptr) Variable UniformConstant + 1057: 32(int) Constant 4 + 1058: TypeArray 24(ivec2) 1057 + 1059: 24(ivec2) ConstantComposite 966 970 + 1060: 23(int) Constant 15 + 1061: 23(int) Constant 16 + 1062: 24(ivec2) ConstantComposite 1060 1061 + 1063: 23(int) Constant 4294967294 + 1064: 23(int) Constant 0 + 1065: 24(ivec2) ConstantComposite 1063 1064 + 1066: 1058 ConstantComposite 1059 27 1062 1065 + 1074: TypeVector 23(int) 4 + 1075: TypePointer Output 1074(ivec4) + 1076(ioutp): 1075(ptr) Variable Output + 1077: TypeImage 23(int) 2D array sampled format:Unknown + 1078: TypeSampledImage 1077 + 1079: TypePointer UniformConstant 1078 + 1080(isamp2DA): 1079(ptr) Variable UniformConstant + 1082: 10(float) Constant 1036831949 + 1083: 1043(fvec3) ConstantComposite 1082 1082 1082 + 1084: 24(ivec2) ConstantComposite 966 966 + 1096: TypePointer Input 11(fvec4) +1097(gl_FragCoord): 1096(ptr) Variable Input + 1099(vl2): 1096(ptr) Variable Input + 1104: TypePointer Output 32(int) + 1105(uo): 1104(ptr) Variable Output + 1106: TypePointer Input 32(int) + 1107(u): 1106(ptr) Variable Input + 1114: TypePointer Function 23(int) +1116(gl_PrimitiveID): 1026(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 1019(v): 1018(ptr) Variable Function + 1115(id): 1114(ptr) Variable Function + 1028: 23(int) Load 1027(i) + 1030: 1029(ptr) AccessChain 1025(arrayedSampler) 1028 + 1031: 1021 Load 1030 + 1034: 20(fvec2) Load 1033(c2D) + 1035: 11(fvec4) ImageSampleImplicitLod 1031 1034 + Store 1019(v) 1035 + 1040: 1039(ptr) AccessChain 1038(gl_ClipDistance) 966 + 1041: 10(float) Load 1040 + 1042: 34(ptr) AccessChain 13(outp) 33 + Store 1042 1041 + 1044: 11(fvec4) Load 1019(v) + 1045: 1043(fvec3) VectorShuffle 1044 1044 1 2 3 + 1046: 11(fvec4) Load 13(outp) + 1047: 11(fvec4) VectorShuffle 1046 1045 0 4 5 6 + Store 13(outp) 1047 + 1055: 1052 Load 1054(samp2dr) + 1056: 20(fvec2) Load 1033(c2D) + 1067: 1048(ivec4) ImageGather 1055 1056 970 ConstOffsets 1066 + Store 1050(uoutp) 1067 + 1068: 1029(ptr) AccessChain 1025(arrayedSampler) 1064 + 1069: 1021 Load 1068 + 1070: 20(fvec2) Load 1033(c2D) + 1071: 11(fvec4) ImageGather 1069 1070 1064 + 1072: 11(fvec4) Load 13(outp) + 1073: 11(fvec4) FAdd 1072 1071 + Store 13(outp) 1073 + 1081: 1078 Load 1080(isamp2DA) + 1085: 1074(ivec4) ImageGather 1081 1083 25 ConstOffset 1084 + Store 1076(ioutp) 1085 + 1086: 1078 Load 1080(isamp2DA) + 1087: 1074(ivec4) ImageGather 1086 1083 25 ConstOffset 1084 + 1088: 1074(ivec4) Load 1076(ioutp) + 1089: 1074(ivec4) IAdd 1088 1087 + Store 1076(ioutp) 1089 + 1090: 1078 Load 1080(isamp2DA) + 1091: 23(int) Load 1027(i) + 1092: 24(ivec2) CompositeConstruct 1091 1091 + 1093: 1074(ivec4) ImageGather 1090 1083 1064 Offset 1092 + 1094: 1074(ivec4) Load 1076(ioutp) + 1095: 1074(ivec4) IAdd 1094 1093 + Store 1076(ioutp) 1095 + 1098: 11(fvec4) Load 1097(gl_FragCoord) + 1100: 11(fvec4) Load 1099(vl2) + 1101: 11(fvec4) FAdd 1098 1100 + 1102: 11(fvec4) Load 13(outp) + 1103: 11(fvec4) FAdd 1102 1101 + Store 13(outp) 1103 + 1108: 32(int) Load 1107(u) + 1109: 23(int) Load 1027(i) + 1110: 32(int) Bitcast 1109 + 1111: 32(int) UMod 1108 1110 + Store 1105(uo) 1111 + 1112: 2 FunctionCall 6(foo23() + 1113: 2 FunctionCall 8(doubles() + 1117: 23(int) Load 1116(gl_PrimitiveID) + Store 1115(id) 1117 + Return + FunctionEnd + 6(foo23(): 2 Function None 3 + 7: Label + 18: 15 Load 17(u2drs) + 19: 11(fvec4) Load 13(outp) + 28: 10(float) CompositeExtract 19 2 + 29: 10(float) CompositeExtract 19 3 + 30: 11(fvec4) CompositeInsert 29 19 2 + 31: 10(float) ImageSampleProjDrefExplicitLod 18 30 28 Grad ConstOffset 22 22 27 + 35: 34(ptr) AccessChain 13(outp) 33 + 36: 10(float) Load 35 + 37: 10(float) FAdd 36 31 + 38: 34(ptr) AccessChain 13(outp) 33 + Store 38 37 + Return + FunctionEnd + 8(doubles(): 2 Function None 3 + 9: Label + 41(doublev): 40(ptr) Variable Function + 45(dvec2v): 44(ptr) Variable Function + 50(dvec3v): 49(ptr) Variable Function + 55(dvec4v): 54(ptr) Variable Function + 430(boolv): 429(ptr) Variable Function + 439(bvec2v): 438(ptr) Variable Function + 448(bvec3v): 447(ptr) Variable Function + 457(bvec4v): 456(ptr) Variable Function + 557: 429(ptr) Variable Function + 566: 438(ptr) Variable Function + 575: 447(ptr) Variable Function + 584: 456(ptr) Variable Function + 739(dmat2v): 738(ptr) Variable Function + 745(dmat3v): 744(ptr) Variable Function + 751(dmat4v): 750(ptr) Variable Function + 757(dmat2x3v): 756(ptr) Variable Function + 763(dmat3x2v): 762(ptr) Variable Function + 769(dmat2x4v): 768(ptr) Variable Function + 775(dmat4x2v): 774(ptr) Variable Function + 781(dmat3x4v): 780(ptr) Variable Function + 787(dmat4x3v): 786(ptr) Variable Function + Store 41(doublev) 42 + Store 45(dvec2v) 47 + Store 50(dvec3v) 52 + 56:39(float64_t) Load 41(doublev) + 57: 53(f64vec4) CompositeConstruct 56 56 56 56 + 58: 53(f64vec4) ExtInst 1(GLSL.std.450) 31(Sqrt) 57 + Store 55(dvec4v) 58 + 59:39(float64_t) Load 41(doublev) + 60:39(float64_t) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 59 + 61:39(float64_t) Load 41(doublev) + 62:39(float64_t) FAdd 61 60 + Store 41(doublev) 62 + 63: 43(f64vec2) Load 45(dvec2v) + 64: 43(f64vec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 63 + 65: 43(f64vec2) Load 45(dvec2v) + 66: 43(f64vec2) FAdd 65 64 + Store 45(dvec2v) 66 + 67: 48(f64vec3) Load 50(dvec3v) + 68: 48(f64vec3) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 67 + 69: 48(f64vec3) Load 50(dvec3v) + 70: 48(f64vec3) FAdd 69 68 + Store 50(dvec3v) 70 + 71: 53(f64vec4) Load 55(dvec4v) + 72: 53(f64vec4) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 71 + 73: 53(f64vec4) Load 55(dvec4v) + 74: 53(f64vec4) FAdd 73 72 + Store 55(dvec4v) 74 + 75:39(float64_t) Load 41(doublev) + 76:39(float64_t) ExtInst 1(GLSL.std.450) 4(FAbs) 75 + 77:39(float64_t) Load 41(doublev) + 78:39(float64_t) FAdd 77 76 + Store 41(doublev) 78 + 79: 43(f64vec2) Load 45(dvec2v) + 80: 43(f64vec2) ExtInst 1(GLSL.std.450) 4(FAbs) 79 + 81: 43(f64vec2) Load 45(dvec2v) + 82: 43(f64vec2) FAdd 81 80 + Store 45(dvec2v) 82 + 83: 48(f64vec3) Load 50(dvec3v) + 84: 48(f64vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 83 + 85: 48(f64vec3) Load 50(dvec3v) + 86: 48(f64vec3) FAdd 85 84 + Store 50(dvec3v) 86 + 87: 53(f64vec4) Load 55(dvec4v) + 88: 53(f64vec4) ExtInst 1(GLSL.std.450) 4(FAbs) 87 + 89: 53(f64vec4) Load 55(dvec4v) + 90: 53(f64vec4) FAdd 89 88 + Store 55(dvec4v) 90 + 91:39(float64_t) Load 41(doublev) + 92:39(float64_t) ExtInst 1(GLSL.std.450) 6(FSign) 91 + 93:39(float64_t) Load 41(doublev) + 94:39(float64_t) FAdd 93 92 + Store 41(doublev) 94 + 95: 43(f64vec2) Load 45(dvec2v) + 96: 43(f64vec2) ExtInst 1(GLSL.std.450) 6(FSign) 95 + 97: 43(f64vec2) Load 45(dvec2v) + 98: 43(f64vec2) FAdd 97 96 + Store 45(dvec2v) 98 + 99: 48(f64vec3) Load 50(dvec3v) + 100: 48(f64vec3) ExtInst 1(GLSL.std.450) 6(FSign) 99 + 101: 48(f64vec3) Load 50(dvec3v) + 102: 48(f64vec3) FAdd 101 100 + Store 50(dvec3v) 102 + 103: 53(f64vec4) Load 55(dvec4v) + 104: 53(f64vec4) ExtInst 1(GLSL.std.450) 6(FSign) 103 + 105: 53(f64vec4) Load 55(dvec4v) + 106: 53(f64vec4) FAdd 105 104 + Store 55(dvec4v) 106 + 107:39(float64_t) Load 41(doublev) + 108:39(float64_t) ExtInst 1(GLSL.std.450) 8(Floor) 107 + 109:39(float64_t) Load 41(doublev) + 110:39(float64_t) FAdd 109 108 + Store 41(doublev) 110 + 111: 43(f64vec2) Load 45(dvec2v) + 112: 43(f64vec2) ExtInst 1(GLSL.std.450) 8(Floor) 111 + 113: 43(f64vec2) Load 45(dvec2v) + 114: 43(f64vec2) FAdd 113 112 + Store 45(dvec2v) 114 + 115: 48(f64vec3) Load 50(dvec3v) + 116: 48(f64vec3) ExtInst 1(GLSL.std.450) 8(Floor) 115 + 117: 48(f64vec3) Load 50(dvec3v) + 118: 48(f64vec3) FAdd 117 116 + Store 50(dvec3v) 118 + 119: 53(f64vec4) Load 55(dvec4v) + 120: 53(f64vec4) ExtInst 1(GLSL.std.450) 8(Floor) 119 + 121: 53(f64vec4) Load 55(dvec4v) + 122: 53(f64vec4) FAdd 121 120 + Store 55(dvec4v) 122 + 123:39(float64_t) Load 41(doublev) + 124:39(float64_t) ExtInst 1(GLSL.std.450) 3(Trunc) 123 + 125:39(float64_t) Load 41(doublev) + 126:39(float64_t) FAdd 125 124 + Store 41(doublev) 126 + 127: 43(f64vec2) Load 45(dvec2v) + 128: 43(f64vec2) ExtInst 1(GLSL.std.450) 3(Trunc) 127 + 129: 43(f64vec2) Load 45(dvec2v) + 130: 43(f64vec2) FAdd 129 128 + Store 45(dvec2v) 130 + 131: 48(f64vec3) Load 50(dvec3v) + 132: 48(f64vec3) ExtInst 1(GLSL.std.450) 3(Trunc) 131 + 133: 48(f64vec3) Load 50(dvec3v) + 134: 48(f64vec3) FAdd 133 132 + Store 50(dvec3v) 134 + 135: 53(f64vec4) Load 55(dvec4v) + 136: 53(f64vec4) ExtInst 1(GLSL.std.450) 3(Trunc) 135 + 137: 53(f64vec4) Load 55(dvec4v) + 138: 53(f64vec4) FAdd 137 136 + Store 55(dvec4v) 138 + 139:39(float64_t) Load 41(doublev) + 140:39(float64_t) ExtInst 1(GLSL.std.450) 1(Round) 139 + 141:39(float64_t) Load 41(doublev) + 142:39(float64_t) FAdd 141 140 + Store 41(doublev) 142 + 143: 43(f64vec2) Load 45(dvec2v) + 144: 43(f64vec2) ExtInst 1(GLSL.std.450) 1(Round) 143 + 145: 43(f64vec2) Load 45(dvec2v) + 146: 43(f64vec2) FAdd 145 144 + Store 45(dvec2v) 146 + 147: 48(f64vec3) Load 50(dvec3v) + 148: 48(f64vec3) ExtInst 1(GLSL.std.450) 1(Round) 147 + 149: 48(f64vec3) Load 50(dvec3v) + 150: 48(f64vec3) FAdd 149 148 + Store 50(dvec3v) 150 + 151: 53(f64vec4) Load 55(dvec4v) + 152: 53(f64vec4) ExtInst 1(GLSL.std.450) 1(Round) 151 + 153: 53(f64vec4) Load 55(dvec4v) + 154: 53(f64vec4) FAdd 153 152 + Store 55(dvec4v) 154 + 155:39(float64_t) Load 41(doublev) + 156:39(float64_t) ExtInst 1(GLSL.std.450) 2(RoundEven) 155 + 157:39(float64_t) Load 41(doublev) + 158:39(float64_t) FAdd 157 156 + Store 41(doublev) 158 + 159: 43(f64vec2) Load 45(dvec2v) + 160: 43(f64vec2) ExtInst 1(GLSL.std.450) 2(RoundEven) 159 + 161: 43(f64vec2) Load 45(dvec2v) + 162: 43(f64vec2) FAdd 161 160 + Store 45(dvec2v) 162 + 163: 48(f64vec3) Load 50(dvec3v) + 164: 48(f64vec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 163 + 165: 48(f64vec3) Load 50(dvec3v) + 166: 48(f64vec3) FAdd 165 164 + Store 50(dvec3v) 166 + 167: 53(f64vec4) Load 55(dvec4v) + 168: 53(f64vec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 167 + 169: 53(f64vec4) Load 55(dvec4v) + 170: 53(f64vec4) FAdd 169 168 + Store 55(dvec4v) 170 + 171:39(float64_t) Load 41(doublev) + 172:39(float64_t) ExtInst 1(GLSL.std.450) 9(Ceil) 171 + 173:39(float64_t) Load 41(doublev) + 174:39(float64_t) FAdd 173 172 + Store 41(doublev) 174 + 175: 43(f64vec2) Load 45(dvec2v) + 176: 43(f64vec2) ExtInst 1(GLSL.std.450) 9(Ceil) 175 + 177: 43(f64vec2) Load 45(dvec2v) + 178: 43(f64vec2) FAdd 177 176 + Store 45(dvec2v) 178 + 179: 48(f64vec3) Load 50(dvec3v) + 180: 48(f64vec3) ExtInst 1(GLSL.std.450) 9(Ceil) 179 + 181: 48(f64vec3) Load 50(dvec3v) + 182: 48(f64vec3) FAdd 181 180 + Store 50(dvec3v) 182 + 183: 53(f64vec4) Load 55(dvec4v) + 184: 53(f64vec4) ExtInst 1(GLSL.std.450) 9(Ceil) 183 + 185: 53(f64vec4) Load 55(dvec4v) + 186: 53(f64vec4) FAdd 185 184 + Store 55(dvec4v) 186 + 187:39(float64_t) Load 41(doublev) + 188:39(float64_t) ExtInst 1(GLSL.std.450) 10(Fract) 187 + 189:39(float64_t) Load 41(doublev) + 190:39(float64_t) FAdd 189 188 + Store 41(doublev) 190 + 191: 43(f64vec2) Load 45(dvec2v) + 192: 43(f64vec2) ExtInst 1(GLSL.std.450) 10(Fract) 191 + 193: 43(f64vec2) Load 45(dvec2v) + 194: 43(f64vec2) FAdd 193 192 + Store 45(dvec2v) 194 + 195: 48(f64vec3) Load 50(dvec3v) + 196: 48(f64vec3) ExtInst 1(GLSL.std.450) 10(Fract) 195 + 197: 48(f64vec3) Load 50(dvec3v) + 198: 48(f64vec3) FAdd 197 196 + Store 50(dvec3v) 198 + 199: 53(f64vec4) Load 55(dvec4v) + 200: 53(f64vec4) ExtInst 1(GLSL.std.450) 10(Fract) 199 + 201: 53(f64vec4) Load 55(dvec4v) + 202: 53(f64vec4) FAdd 201 200 + Store 55(dvec4v) 202 + 203:39(float64_t) Load 41(doublev) + 204:39(float64_t) Load 41(doublev) + 205:39(float64_t) FMod 203 204 + 206:39(float64_t) Load 41(doublev) + 207:39(float64_t) FAdd 206 205 + Store 41(doublev) 207 + 208: 43(f64vec2) Load 45(dvec2v) + 209:39(float64_t) Load 41(doublev) + 210: 43(f64vec2) CompositeConstruct 209 209 + 211: 43(f64vec2) FMod 208 210 + 212: 43(f64vec2) Load 45(dvec2v) + 213: 43(f64vec2) FAdd 212 211 + Store 45(dvec2v) 213 + 214: 48(f64vec3) Load 50(dvec3v) + 215:39(float64_t) Load 41(doublev) + 216: 48(f64vec3) CompositeConstruct 215 215 215 + 217: 48(f64vec3) FMod 214 216 + 218: 48(f64vec3) Load 50(dvec3v) + 219: 48(f64vec3) FAdd 218 217 + Store 50(dvec3v) 219 + 220: 53(f64vec4) Load 55(dvec4v) + 221:39(float64_t) Load 41(doublev) + 222: 53(f64vec4) CompositeConstruct 221 221 221 221 + 223: 53(f64vec4) FMod 220 222 + 224: 53(f64vec4) Load 55(dvec4v) + 225: 53(f64vec4) FAdd 224 223 + Store 55(dvec4v) 225 + 226: 43(f64vec2) Load 45(dvec2v) + 227: 43(f64vec2) Load 45(dvec2v) + 228: 43(f64vec2) FMod 226 227 + 229: 43(f64vec2) Load 45(dvec2v) + 230: 43(f64vec2) FAdd 229 228 + Store 45(dvec2v) 230 + 231: 48(f64vec3) Load 50(dvec3v) + 232: 48(f64vec3) Load 50(dvec3v) + 233: 48(f64vec3) FMod 231 232 + 234: 48(f64vec3) Load 50(dvec3v) + 235: 48(f64vec3) FAdd 234 233 + Store 50(dvec3v) 235 + 236: 53(f64vec4) Load 55(dvec4v) + 237: 53(f64vec4) Load 55(dvec4v) + 238: 53(f64vec4) FMod 236 237 + 239: 53(f64vec4) Load 55(dvec4v) + 240: 53(f64vec4) FAdd 239 238 + Store 55(dvec4v) 240 + 241:39(float64_t) Load 41(doublev) + 242:39(float64_t) ExtInst 1(GLSL.std.450) 35(Modf) 241 41(doublev) + 243:39(float64_t) Load 41(doublev) + 244:39(float64_t) FAdd 243 242 + Store 41(doublev) 244 + 245: 43(f64vec2) Load 45(dvec2v) + 246: 43(f64vec2) ExtInst 1(GLSL.std.450) 35(Modf) 245 45(dvec2v) + 247: 43(f64vec2) Load 45(dvec2v) + 248: 43(f64vec2) FAdd 247 246 + Store 45(dvec2v) 248 + 249: 48(f64vec3) Load 50(dvec3v) + 250: 48(f64vec3) ExtInst 1(GLSL.std.450) 35(Modf) 249 50(dvec3v) + 251: 48(f64vec3) Load 50(dvec3v) + 252: 48(f64vec3) FAdd 251 250 + Store 50(dvec3v) 252 + 253: 53(f64vec4) Load 55(dvec4v) + 254: 53(f64vec4) ExtInst 1(GLSL.std.450) 35(Modf) 253 55(dvec4v) + 255: 53(f64vec4) Load 55(dvec4v) + 256: 53(f64vec4) FAdd 255 254 + Store 55(dvec4v) 256 + 257:39(float64_t) Load 41(doublev) + 258:39(float64_t) Load 41(doublev) + 259:39(float64_t) ExtInst 1(GLSL.std.450) 79(NMin) 257 258 + 260:39(float64_t) Load 41(doublev) + 261:39(float64_t) FAdd 260 259 + Store 41(doublev) 261 + 262: 43(f64vec2) Load 45(dvec2v) + 263:39(float64_t) Load 41(doublev) + 264: 43(f64vec2) CompositeConstruct 263 263 + 265: 43(f64vec2) ExtInst 1(GLSL.std.450) 79(NMin) 262 264 + 266: 43(f64vec2) Load 45(dvec2v) + 267: 43(f64vec2) FAdd 266 265 + Store 45(dvec2v) 267 + 268: 48(f64vec3) Load 50(dvec3v) + 269:39(float64_t) Load 41(doublev) + 270: 48(f64vec3) CompositeConstruct 269 269 269 + 271: 48(f64vec3) ExtInst 1(GLSL.std.450) 79(NMin) 268 270 + 272: 48(f64vec3) Load 50(dvec3v) + 273: 48(f64vec3) FAdd 272 271 + Store 50(dvec3v) 273 + 274: 53(f64vec4) Load 55(dvec4v) + 275:39(float64_t) Load 41(doublev) + 276: 53(f64vec4) CompositeConstruct 275 275 275 275 + 277: 53(f64vec4) ExtInst 1(GLSL.std.450) 79(NMin) 274 276 + 278: 53(f64vec4) Load 55(dvec4v) + 279: 53(f64vec4) FAdd 278 277 + Store 55(dvec4v) 279 + 280: 43(f64vec2) Load 45(dvec2v) + 281: 43(f64vec2) Load 45(dvec2v) + 282: 43(f64vec2) ExtInst 1(GLSL.std.450) 79(NMin) 280 281 + 283: 43(f64vec2) Load 45(dvec2v) + 284: 43(f64vec2) FAdd 283 282 + Store 45(dvec2v) 284 + 285: 48(f64vec3) Load 50(dvec3v) + 286: 48(f64vec3) Load 50(dvec3v) + 287: 48(f64vec3) ExtInst 1(GLSL.std.450) 79(NMin) 285 286 + 288: 48(f64vec3) Load 50(dvec3v) + 289: 48(f64vec3) FAdd 288 287 + Store 50(dvec3v) 289 + 290: 53(f64vec4) Load 55(dvec4v) + 291: 53(f64vec4) Load 55(dvec4v) + 292: 53(f64vec4) ExtInst 1(GLSL.std.450) 79(NMin) 290 291 + 293: 53(f64vec4) Load 55(dvec4v) + 294: 53(f64vec4) FAdd 293 292 + Store 55(dvec4v) 294 + 295:39(float64_t) Load 41(doublev) + 296:39(float64_t) Load 41(doublev) + 297:39(float64_t) ExtInst 1(GLSL.std.450) 80(NMax) 295 296 + 298:39(float64_t) Load 41(doublev) + 299:39(float64_t) FAdd 298 297 + Store 41(doublev) 299 + 300: 43(f64vec2) Load 45(dvec2v) + 301:39(float64_t) Load 41(doublev) + 302: 43(f64vec2) CompositeConstruct 301 301 + 303: 43(f64vec2) ExtInst 1(GLSL.std.450) 80(NMax) 300 302 + 304: 43(f64vec2) Load 45(dvec2v) + 305: 43(f64vec2) FAdd 304 303 + Store 45(dvec2v) 305 + 306: 48(f64vec3) Load 50(dvec3v) + 307:39(float64_t) Load 41(doublev) + 308: 48(f64vec3) CompositeConstruct 307 307 307 + 309: 48(f64vec3) ExtInst 1(GLSL.std.450) 80(NMax) 306 308 + 310: 48(f64vec3) Load 50(dvec3v) + 311: 48(f64vec3) FAdd 310 309 + Store 50(dvec3v) 311 + 312: 53(f64vec4) Load 55(dvec4v) + 313:39(float64_t) Load 41(doublev) + 314: 53(f64vec4) CompositeConstruct 313 313 313 313 + 315: 53(f64vec4) ExtInst 1(GLSL.std.450) 80(NMax) 312 314 + 316: 53(f64vec4) Load 55(dvec4v) + 317: 53(f64vec4) FAdd 316 315 + Store 55(dvec4v) 317 + 318: 43(f64vec2) Load 45(dvec2v) + 319: 43(f64vec2) Load 45(dvec2v) + 320: 43(f64vec2) ExtInst 1(GLSL.std.450) 80(NMax) 318 319 + 321: 43(f64vec2) Load 45(dvec2v) + 322: 43(f64vec2) FAdd 321 320 + Store 45(dvec2v) 322 + 323: 48(f64vec3) Load 50(dvec3v) + 324: 48(f64vec3) Load 50(dvec3v) + 325: 48(f64vec3) ExtInst 1(GLSL.std.450) 80(NMax) 323 324 + 326: 48(f64vec3) Load 50(dvec3v) + 327: 48(f64vec3) FAdd 326 325 + Store 50(dvec3v) 327 + 328: 53(f64vec4) Load 55(dvec4v) + 329: 53(f64vec4) Load 55(dvec4v) + 330: 53(f64vec4) ExtInst 1(GLSL.std.450) 80(NMax) 328 329 + 331: 53(f64vec4) Load 55(dvec4v) + 332: 53(f64vec4) FAdd 331 330 + Store 55(dvec4v) 332 + 333:39(float64_t) Load 41(doublev) + 334:39(float64_t) Load 41(doublev) + 335:39(float64_t) Load 41(doublev) + 336:39(float64_t) ExtInst 1(GLSL.std.450) 81(NClamp) 333 334 335 + 337:39(float64_t) Load 41(doublev) + 338:39(float64_t) FAdd 337 336 + Store 41(doublev) 338 + 339: 43(f64vec2) Load 45(dvec2v) + 340:39(float64_t) Load 41(doublev) + 341:39(float64_t) Load 41(doublev) + 342: 43(f64vec2) CompositeConstruct 340 340 + 343: 43(f64vec2) CompositeConstruct 341 341 + 344: 43(f64vec2) ExtInst 1(GLSL.std.450) 81(NClamp) 339 342 343 + 345: 43(f64vec2) Load 45(dvec2v) + 346: 43(f64vec2) FAdd 345 344 + Store 45(dvec2v) 346 + 347: 48(f64vec3) Load 50(dvec3v) + 348:39(float64_t) Load 41(doublev) + 349:39(float64_t) Load 41(doublev) + 350: 48(f64vec3) CompositeConstruct 348 348 348 + 351: 48(f64vec3) CompositeConstruct 349 349 349 + 352: 48(f64vec3) ExtInst 1(GLSL.std.450) 81(NClamp) 347 350 351 + 353: 48(f64vec3) Load 50(dvec3v) + 354: 48(f64vec3) FAdd 353 352 + Store 50(dvec3v) 354 + 355: 53(f64vec4) Load 55(dvec4v) + 356:39(float64_t) Load 41(doublev) + 357:39(float64_t) Load 41(doublev) + 358: 53(f64vec4) CompositeConstruct 356 356 356 356 + 359: 53(f64vec4) CompositeConstruct 357 357 357 357 + 360: 53(f64vec4) ExtInst 1(GLSL.std.450) 81(NClamp) 355 358 359 + 361: 53(f64vec4) Load 55(dvec4v) + 362: 53(f64vec4) FAdd 361 360 + Store 55(dvec4v) 362 + 363: 43(f64vec2) Load 45(dvec2v) + 364: 43(f64vec2) Load 45(dvec2v) + 365: 43(f64vec2) Load 45(dvec2v) + 366: 43(f64vec2) ExtInst 1(GLSL.std.450) 81(NClamp) 363 364 365 + 367: 43(f64vec2) Load 45(dvec2v) + 368: 43(f64vec2) FAdd 367 366 + Store 45(dvec2v) 368 + 369: 48(f64vec3) Load 50(dvec3v) + 370: 48(f64vec3) Load 50(dvec3v) + 371: 48(f64vec3) Load 50(dvec3v) + 372: 48(f64vec3) ExtInst 1(GLSL.std.450) 81(NClamp) 369 370 371 + 373: 48(f64vec3) Load 50(dvec3v) + 374: 48(f64vec3) FAdd 373 372 + Store 50(dvec3v) 374 + 375: 53(f64vec4) Load 55(dvec4v) + 376: 53(f64vec4) Load 55(dvec4v) + 377: 53(f64vec4) Load 55(dvec4v) + 378: 53(f64vec4) ExtInst 1(GLSL.std.450) 81(NClamp) 375 376 377 + 379: 53(f64vec4) Load 55(dvec4v) + 380: 53(f64vec4) FAdd 379 378 + Store 55(dvec4v) 380 + 381:39(float64_t) Load 41(doublev) + 382:39(float64_t) Load 41(doublev) + 383:39(float64_t) Load 41(doublev) + 384:39(float64_t) ExtInst 1(GLSL.std.450) 46(FMix) 381 382 383 + 385:39(float64_t) Load 41(doublev) + 386:39(float64_t) FAdd 385 384 + Store 41(doublev) 386 + 387: 43(f64vec2) Load 45(dvec2v) + 388: 43(f64vec2) Load 45(dvec2v) + 389:39(float64_t) Load 41(doublev) + 390: 43(f64vec2) CompositeConstruct 389 389 + 391: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 387 388 390 + 392: 43(f64vec2) Load 45(dvec2v) + 393: 43(f64vec2) FAdd 392 391 + Store 45(dvec2v) 393 + 394: 48(f64vec3) Load 50(dvec3v) + 395: 48(f64vec3) Load 50(dvec3v) + 396:39(float64_t) Load 41(doublev) + 397: 48(f64vec3) CompositeConstruct 396 396 396 + 398: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 394 395 397 + 399: 48(f64vec3) Load 50(dvec3v) + 400: 48(f64vec3) FAdd 399 398 + Store 50(dvec3v) 400 + 401: 53(f64vec4) Load 55(dvec4v) + 402: 53(f64vec4) Load 55(dvec4v) + 403:39(float64_t) Load 41(doublev) + 404: 53(f64vec4) CompositeConstruct 403 403 403 403 + 405: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 401 402 404 + 406: 53(f64vec4) Load 55(dvec4v) + 407: 53(f64vec4) FAdd 406 405 + Store 55(dvec4v) 407 + 408: 43(f64vec2) Load 45(dvec2v) + 409: 43(f64vec2) Load 45(dvec2v) + 410: 43(f64vec2) Load 45(dvec2v) + 411: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 408 409 410 + 412: 43(f64vec2) Load 45(dvec2v) + 413: 43(f64vec2) FAdd 412 411 + Store 45(dvec2v) 413 + 414: 48(f64vec3) Load 50(dvec3v) + 415: 48(f64vec3) Load 50(dvec3v) + 416: 48(f64vec3) Load 50(dvec3v) + 417: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 414 415 416 + 418: 48(f64vec3) Load 50(dvec3v) + 419: 48(f64vec3) FAdd 418 417 + Store 50(dvec3v) 419 + 420: 53(f64vec4) Load 55(dvec4v) + 421: 53(f64vec4) Load 55(dvec4v) + 422: 53(f64vec4) Load 55(dvec4v) + 423: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 420 421 422 + 424: 53(f64vec4) Load 55(dvec4v) + 425: 53(f64vec4) FAdd 424 423 + Store 55(dvec4v) 425 + 426:39(float64_t) Load 41(doublev) + 427:39(float64_t) Load 41(doublev) + 431: 428(bool) Load 430(boolv) + 432:39(float64_t) Select 431 427 426 + 433:39(float64_t) Load 41(doublev) + 434:39(float64_t) FAdd 433 432 + Store 41(doublev) 434 + 435: 43(f64vec2) Load 45(dvec2v) + 436: 43(f64vec2) Load 45(dvec2v) + 440: 437(bvec2) Load 439(bvec2v) + 441: 43(f64vec2) Select 440 436 435 + 442: 43(f64vec2) Load 45(dvec2v) + 443: 43(f64vec2) FAdd 442 441 + Store 45(dvec2v) 443 + 444: 48(f64vec3) Load 50(dvec3v) + 445: 48(f64vec3) Load 50(dvec3v) + 449: 446(bvec3) Load 448(bvec3v) + 450: 48(f64vec3) Select 449 445 444 + 451: 48(f64vec3) Load 50(dvec3v) + 452: 48(f64vec3) FAdd 451 450 + Store 50(dvec3v) 452 + 453: 53(f64vec4) Load 55(dvec4v) + 454: 53(f64vec4) Load 55(dvec4v) + 458: 455(bvec4) Load 457(bvec4v) + 459: 53(f64vec4) Select 458 454 453 + 460: 53(f64vec4) Load 55(dvec4v) + 461: 53(f64vec4) FAdd 460 459 + Store 55(dvec4v) 461 + 462:39(float64_t) Load 41(doublev) + 463:39(float64_t) Load 41(doublev) + 464:39(float64_t) ExtInst 1(GLSL.std.450) 48(Step) 462 463 + 465:39(float64_t) Load 41(doublev) + 466:39(float64_t) FAdd 465 464 + Store 41(doublev) 466 + 467: 43(f64vec2) Load 45(dvec2v) + 468: 43(f64vec2) Load 45(dvec2v) + 469: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 467 468 + 470: 43(f64vec2) Load 45(dvec2v) + 471: 43(f64vec2) FAdd 470 469 + Store 45(dvec2v) 471 + 472: 48(f64vec3) Load 50(dvec3v) + 473: 48(f64vec3) Load 50(dvec3v) + 474: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 472 473 + 475: 48(f64vec3) Load 50(dvec3v) + 476: 48(f64vec3) FAdd 475 474 + Store 50(dvec3v) 476 + 477: 53(f64vec4) Load 55(dvec4v) + 478: 53(f64vec4) Load 55(dvec4v) + 479: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 477 478 + 480: 53(f64vec4) Load 55(dvec4v) + 481: 53(f64vec4) FAdd 480 479 + Store 55(dvec4v) 481 + 482:39(float64_t) Load 41(doublev) + 483: 43(f64vec2) Load 45(dvec2v) + 484: 43(f64vec2) CompositeConstruct 482 482 + 485: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 484 483 + 486: 43(f64vec2) Load 45(dvec2v) + 487: 43(f64vec2) FAdd 486 485 + Store 45(dvec2v) 487 + 488:39(float64_t) Load 41(doublev) + 489: 48(f64vec3) Load 50(dvec3v) + 490: 48(f64vec3) CompositeConstruct 488 488 488 + 491: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 490 489 + 492: 48(f64vec3) Load 50(dvec3v) + 493: 48(f64vec3) FAdd 492 491 + Store 50(dvec3v) 493 + 494:39(float64_t) Load 41(doublev) + 495: 53(f64vec4) Load 55(dvec4v) + 496: 53(f64vec4) CompositeConstruct 494 494 494 494 + 497: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 496 495 + 498: 53(f64vec4) Load 55(dvec4v) + 499: 53(f64vec4) FAdd 498 497 + Store 55(dvec4v) 499 + 500:39(float64_t) Load 41(doublev) + 501:39(float64_t) Load 41(doublev) + 502:39(float64_t) Load 41(doublev) + 503:39(float64_t) ExtInst 1(GLSL.std.450) 49(SmoothStep) 500 501 502 + 504:39(float64_t) Load 41(doublev) + 505:39(float64_t) FAdd 504 503 + Store 41(doublev) 505 + 506: 43(f64vec2) Load 45(dvec2v) + 507: 43(f64vec2) Load 45(dvec2v) + 508: 43(f64vec2) Load 45(dvec2v) + 509: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 506 507 508 + 510: 43(f64vec2) Load 45(dvec2v) + 511: 43(f64vec2) FAdd 510 509 + Store 45(dvec2v) 511 + 512: 48(f64vec3) Load 50(dvec3v) + 513: 48(f64vec3) Load 50(dvec3v) + 514: 48(f64vec3) Load 50(dvec3v) + 515: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 512 513 514 + 516: 48(f64vec3) Load 50(dvec3v) + 517: 48(f64vec3) FAdd 516 515 + Store 50(dvec3v) 517 + 518: 53(f64vec4) Load 55(dvec4v) + 519: 53(f64vec4) Load 55(dvec4v) + 520: 53(f64vec4) Load 55(dvec4v) + 521: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 518 519 520 + 522: 53(f64vec4) Load 55(dvec4v) + 523: 53(f64vec4) FAdd 522 521 + Store 55(dvec4v) 523 + 524:39(float64_t) Load 41(doublev) + 525:39(float64_t) Load 41(doublev) + 526: 43(f64vec2) Load 45(dvec2v) + 527: 43(f64vec2) CompositeConstruct 524 524 + 528: 43(f64vec2) CompositeConstruct 525 525 + 529: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 527 528 526 + 530: 43(f64vec2) Load 45(dvec2v) + 531: 43(f64vec2) FAdd 530 529 + Store 45(dvec2v) 531 + 532:39(float64_t) Load 41(doublev) + 533:39(float64_t) Load 41(doublev) + 534: 48(f64vec3) Load 50(dvec3v) + 535: 48(f64vec3) CompositeConstruct 532 532 532 + 536: 48(f64vec3) CompositeConstruct 533 533 533 + 537: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 535 536 534 + 538: 48(f64vec3) Load 50(dvec3v) + 539: 48(f64vec3) FAdd 538 537 + Store 50(dvec3v) 539 + 540:39(float64_t) Load 41(doublev) + 541:39(float64_t) Load 41(doublev) + 542: 53(f64vec4) Load 55(dvec4v) + 543: 53(f64vec4) CompositeConstruct 540 540 540 540 + 544: 53(f64vec4) CompositeConstruct 541 541 541 541 + 545: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 543 544 542 + 546: 53(f64vec4) Load 55(dvec4v) + 547: 53(f64vec4) FAdd 546 545 + Store 55(dvec4v) 547 + 548:39(float64_t) Load 41(doublev) + 549: 428(bool) IsNan 548 + Store 430(boolv) 549 + 550: 43(f64vec2) Load 45(dvec2v) + 551: 437(bvec2) IsNan 550 + Store 439(bvec2v) 551 + 552: 48(f64vec3) Load 50(dvec3v) + 553: 446(bvec3) IsNan 552 + Store 448(bvec3v) 553 + 554: 53(f64vec4) Load 55(dvec4v) + 555: 455(bvec4) IsNan 554 + Store 457(bvec4v) 555 + 556: 428(bool) Load 430(boolv) + SelectionMerge 559 None + BranchConditional 556 558 562 + 558: Label + 560:39(float64_t) Load 41(doublev) + 561: 428(bool) IsInf 560 + Store 557 561 + Branch 559 + 562: Label + Store 557 563 + Branch 559 + 559: Label + 564: 428(bool) Load 557 + Store 430(boolv) 564 + 565: 428(bool) Load 430(boolv) + SelectionMerge 568 None + BranchConditional 565 567 571 + 567: Label + 569: 43(f64vec2) Load 45(dvec2v) + 570: 437(bvec2) IsInf 569 + Store 566 570 + Branch 568 + 571: Label + Store 566 572 + Branch 568 + 568: Label + 573: 437(bvec2) Load 566 + Store 439(bvec2v) 573 + 574: 428(bool) Load 430(boolv) + SelectionMerge 577 None + BranchConditional 574 576 580 + 576: Label + 578: 48(f64vec3) Load 50(dvec3v) + 579: 446(bvec3) IsInf 578 + Store 575 579 + Branch 577 + 580: Label + Store 575 581 + Branch 577 + 577: Label + 582: 446(bvec3) Load 575 + Store 448(bvec3v) 582 + 583: 428(bool) Load 430(boolv) + SelectionMerge 586 None + BranchConditional 583 585 589 + 585: Label + 587: 53(f64vec4) Load 55(dvec4v) + 588: 455(bvec4) IsInf 587 + Store 584 588 + Branch 586 + 589: Label + Store 584 590 + Branch 586 + 586: Label + 591: 455(bvec4) Load 584 + Store 457(bvec4v) 591 + 592:39(float64_t) Load 41(doublev) + 593:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 592 + 594:39(float64_t) Load 41(doublev) + 595:39(float64_t) FAdd 594 593 + Store 41(doublev) 595 + 596: 43(f64vec2) Load 45(dvec2v) + 597:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 596 + 598:39(float64_t) Load 41(doublev) + 599:39(float64_t) FAdd 598 597 + Store 41(doublev) 599 + 600: 48(f64vec3) Load 50(dvec3v) + 601:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 600 + 602:39(float64_t) Load 41(doublev) + 603:39(float64_t) FAdd 602 601 + Store 41(doublev) 603 + 604: 53(f64vec4) Load 55(dvec4v) + 605:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 604 + 606:39(float64_t) Load 41(doublev) + 607:39(float64_t) FAdd 606 605 + Store 41(doublev) 607 + 608:39(float64_t) Load 41(doublev) + 609:39(float64_t) Load 41(doublev) + 610:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 608 609 + 611:39(float64_t) Load 41(doublev) + 612:39(float64_t) FAdd 611 610 + Store 41(doublev) 612 + 613: 43(f64vec2) Load 45(dvec2v) + 614: 43(f64vec2) Load 45(dvec2v) + 615:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 613 614 + 616:39(float64_t) Load 41(doublev) + 617:39(float64_t) FAdd 616 615 + Store 41(doublev) 617 + 618: 48(f64vec3) Load 50(dvec3v) + 619: 48(f64vec3) Load 50(dvec3v) + 620:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 618 619 + 621:39(float64_t) Load 41(doublev) + 622:39(float64_t) FAdd 621 620 + Store 41(doublev) 622 + 623: 53(f64vec4) Load 55(dvec4v) + 624: 53(f64vec4) Load 55(dvec4v) + 625:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 623 624 + 626:39(float64_t) Load 41(doublev) + 627:39(float64_t) FAdd 626 625 + Store 41(doublev) 627 + 628:39(float64_t) Load 41(doublev) + 629:39(float64_t) Load 41(doublev) + 630:39(float64_t) FMul 628 629 + 631:39(float64_t) Load 41(doublev) + 632:39(float64_t) FAdd 631 630 + Store 41(doublev) 632 + 633: 43(f64vec2) Load 45(dvec2v) + 634: 43(f64vec2) Load 45(dvec2v) + 635:39(float64_t) Dot 633 634 + 636:39(float64_t) Load 41(doublev) + 637:39(float64_t) FAdd 636 635 + Store 41(doublev) 637 + 638: 48(f64vec3) Load 50(dvec3v) + 639: 48(f64vec3) Load 50(dvec3v) + 640:39(float64_t) Dot 638 639 + 641:39(float64_t) Load 41(doublev) + 642:39(float64_t) FAdd 641 640 + Store 41(doublev) 642 + 643: 53(f64vec4) Load 55(dvec4v) + 644: 53(f64vec4) Load 55(dvec4v) + 645:39(float64_t) Dot 643 644 + 646:39(float64_t) Load 41(doublev) + 647:39(float64_t) FAdd 646 645 + Store 41(doublev) 647 + 648: 48(f64vec3) Load 50(dvec3v) + 649: 48(f64vec3) Load 50(dvec3v) + 650: 48(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 648 649 + 651: 48(f64vec3) Load 50(dvec3v) + 652: 48(f64vec3) FAdd 651 650 + Store 50(dvec3v) 652 + 653:39(float64_t) Load 41(doublev) + 654:39(float64_t) ExtInst 1(GLSL.std.450) 69(Normalize) 653 + 655:39(float64_t) Load 41(doublev) + 656:39(float64_t) FAdd 655 654 + Store 41(doublev) 656 + 657: 43(f64vec2) Load 45(dvec2v) + 658: 43(f64vec2) ExtInst 1(GLSL.std.450) 69(Normalize) 657 + 659: 43(f64vec2) Load 45(dvec2v) + 660: 43(f64vec2) FAdd 659 658 + Store 45(dvec2v) 660 + 661: 48(f64vec3) Load 50(dvec3v) + 662: 48(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 661 + 663: 48(f64vec3) Load 50(dvec3v) + 664: 48(f64vec3) FAdd 663 662 + Store 50(dvec3v) 664 + 665: 53(f64vec4) Load 55(dvec4v) + 666: 53(f64vec4) ExtInst 1(GLSL.std.450) 69(Normalize) 665 + 667: 53(f64vec4) Load 55(dvec4v) + 668: 53(f64vec4) FAdd 667 666 + Store 55(dvec4v) 668 + 669:39(float64_t) Load 41(doublev) + 670:39(float64_t) Load 41(doublev) + 671:39(float64_t) Load 41(doublev) + 672:39(float64_t) ExtInst 1(GLSL.std.450) 70(FaceForward) 669 670 671 + 673:39(float64_t) Load 41(doublev) + 674:39(float64_t) FAdd 673 672 + Store 41(doublev) 674 + 675: 43(f64vec2) Load 45(dvec2v) + 676: 43(f64vec2) Load 45(dvec2v) + 677: 43(f64vec2) Load 45(dvec2v) + 678: 43(f64vec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 675 676 677 + 679: 43(f64vec2) Load 45(dvec2v) + 680: 43(f64vec2) FAdd 679 678 + Store 45(dvec2v) 680 + 681: 48(f64vec3) Load 50(dvec3v) + 682: 48(f64vec3) Load 50(dvec3v) + 683: 48(f64vec3) Load 50(dvec3v) + 684: 48(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 681 682 683 + 685: 48(f64vec3) Load 50(dvec3v) + 686: 48(f64vec3) FAdd 685 684 + Store 50(dvec3v) 686 + 687: 53(f64vec4) Load 55(dvec4v) + 688: 53(f64vec4) Load 55(dvec4v) + 689: 53(f64vec4) Load 55(dvec4v) + 690: 53(f64vec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 687 688 689 + 691: 53(f64vec4) Load 55(dvec4v) + 692: 53(f64vec4) FAdd 691 690 + Store 55(dvec4v) 692 + 693:39(float64_t) Load 41(doublev) + 694:39(float64_t) Load 41(doublev) + 695:39(float64_t) ExtInst 1(GLSL.std.450) 71(Reflect) 693 694 + 696:39(float64_t) Load 41(doublev) + 697:39(float64_t) FAdd 696 695 + Store 41(doublev) 697 + 698: 43(f64vec2) Load 45(dvec2v) + 699: 43(f64vec2) Load 45(dvec2v) + 700: 43(f64vec2) ExtInst 1(GLSL.std.450) 71(Reflect) 698 699 + 701: 43(f64vec2) Load 45(dvec2v) + 702: 43(f64vec2) FAdd 701 700 + Store 45(dvec2v) 702 + 703: 48(f64vec3) Load 50(dvec3v) + 704: 48(f64vec3) Load 50(dvec3v) + 705: 48(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 703 704 + 706: 48(f64vec3) Load 50(dvec3v) + 707: 48(f64vec3) FAdd 706 705 + Store 50(dvec3v) 707 + 708: 53(f64vec4) Load 55(dvec4v) + 709: 53(f64vec4) Load 55(dvec4v) + 710: 53(f64vec4) ExtInst 1(GLSL.std.450) 71(Reflect) 708 709 + 711: 53(f64vec4) Load 55(dvec4v) + 712: 53(f64vec4) FAdd 711 710 + Store 55(dvec4v) 712 + 713:39(float64_t) Load 41(doublev) + 714:39(float64_t) Load 41(doublev) + 715:39(float64_t) Load 41(doublev) + 716:39(float64_t) ExtInst 1(GLSL.std.450) 72(Refract) 713 714 715 + 717:39(float64_t) Load 41(doublev) + 718:39(float64_t) FAdd 717 716 + Store 41(doublev) 718 + 719: 43(f64vec2) Load 45(dvec2v) + 720: 43(f64vec2) Load 45(dvec2v) + 721:39(float64_t) Load 41(doublev) + 722: 43(f64vec2) ExtInst 1(GLSL.std.450) 72(Refract) 719 720 721 + 723: 43(f64vec2) Load 45(dvec2v) + 724: 43(f64vec2) FAdd 723 722 + Store 45(dvec2v) 724 + 725: 48(f64vec3) Load 50(dvec3v) + 726: 48(f64vec3) Load 50(dvec3v) + 727:39(float64_t) Load 41(doublev) + 728: 48(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 725 726 727 + 729: 48(f64vec3) Load 50(dvec3v) + 730: 48(f64vec3) FAdd 729 728 + Store 50(dvec3v) 730 + 731: 53(f64vec4) Load 55(dvec4v) + 732: 53(f64vec4) Load 55(dvec4v) + 733:39(float64_t) Load 41(doublev) + 734: 53(f64vec4) ExtInst 1(GLSL.std.450) 72(Refract) 731 732 733 + 735: 53(f64vec4) Load 55(dvec4v) + 736: 53(f64vec4) FAdd 735 734 + Store 55(dvec4v) 736 + 740: 43(f64vec2) Load 45(dvec2v) + 741: 43(f64vec2) Load 45(dvec2v) + 742: 737 OuterProduct 740 741 + Store 739(dmat2v) 742 + 746: 48(f64vec3) Load 50(dvec3v) + 747: 48(f64vec3) Load 50(dvec3v) + 748: 743 OuterProduct 746 747 + Store 745(dmat3v) 748 + 752: 53(f64vec4) Load 55(dvec4v) + 753: 53(f64vec4) Load 55(dvec4v) + 754: 749 OuterProduct 752 753 + Store 751(dmat4v) 754 + 758: 48(f64vec3) Load 50(dvec3v) + 759: 43(f64vec2) Load 45(dvec2v) + 760: 755 OuterProduct 758 759 + Store 757(dmat2x3v) 760 + 764: 43(f64vec2) Load 45(dvec2v) + 765: 48(f64vec3) Load 50(dvec3v) + 766: 761 OuterProduct 764 765 + Store 763(dmat3x2v) 766 + 770: 53(f64vec4) Load 55(dvec4v) + 771: 43(f64vec2) Load 45(dvec2v) + 772: 767 OuterProduct 770 771 + Store 769(dmat2x4v) 772 + 776: 43(f64vec2) Load 45(dvec2v) + 777: 53(f64vec4) Load 55(dvec4v) + 778: 773 OuterProduct 776 777 + Store 775(dmat4x2v) 778 + 782: 53(f64vec4) Load 55(dvec4v) + 783: 48(f64vec3) Load 50(dvec3v) + 784: 779 OuterProduct 782 783 + Store 781(dmat3x4v) 784 + 788: 48(f64vec3) Load 50(dvec3v) + 789: 53(f64vec4) Load 55(dvec4v) + 790: 785 OuterProduct 788 789 + Store 787(dmat4x3v) 790 + 791: 737 Load 739(dmat2v) + 792: 737 Load 739(dmat2v) + 793: 43(f64vec2) CompositeExtract 791 0 + 794: 43(f64vec2) CompositeExtract 792 0 + 795: 43(f64vec2) FMul 793 794 + 796: 43(f64vec2) CompositeExtract 791 1 + 797: 43(f64vec2) CompositeExtract 792 1 + 798: 43(f64vec2) FMul 796 797 + 799: 737 CompositeConstruct 795 798 + 800: 737 Load 739(dmat2v) + 801: 737 MatrixTimesMatrix 800 799 + Store 739(dmat2v) 801 + 802: 743 Load 745(dmat3v) + 803: 743 Load 745(dmat3v) + 804: 48(f64vec3) CompositeExtract 802 0 + 805: 48(f64vec3) CompositeExtract 803 0 + 806: 48(f64vec3) FMul 804 805 + 807: 48(f64vec3) CompositeExtract 802 1 + 808: 48(f64vec3) CompositeExtract 803 1 + 809: 48(f64vec3) FMul 807 808 + 810: 48(f64vec3) CompositeExtract 802 2 + 811: 48(f64vec3) CompositeExtract 803 2 + 812: 48(f64vec3) FMul 810 811 + 813: 743 CompositeConstruct 806 809 812 + 814: 743 Load 745(dmat3v) + 815: 743 MatrixTimesMatrix 814 813 + Store 745(dmat3v) 815 + 816: 749 Load 751(dmat4v) + 817: 749 Load 751(dmat4v) + 818: 53(f64vec4) CompositeExtract 816 0 + 819: 53(f64vec4) CompositeExtract 817 0 + 820: 53(f64vec4) FMul 818 819 + 821: 53(f64vec4) CompositeExtract 816 1 + 822: 53(f64vec4) CompositeExtract 817 1 + 823: 53(f64vec4) FMul 821 822 + 824: 53(f64vec4) CompositeExtract 816 2 + 825: 53(f64vec4) CompositeExtract 817 2 + 826: 53(f64vec4) FMul 824 825 + 827: 53(f64vec4) CompositeExtract 816 3 + 828: 53(f64vec4) CompositeExtract 817 3 + 829: 53(f64vec4) FMul 827 828 + 830: 749 CompositeConstruct 820 823 826 829 + 831: 749 Load 751(dmat4v) + 832: 749 MatrixTimesMatrix 831 830 + Store 751(dmat4v) 832 + 833: 755 Load 757(dmat2x3v) + 834: 755 Load 757(dmat2x3v) + 835: 48(f64vec3) CompositeExtract 833 0 + 836: 48(f64vec3) CompositeExtract 834 0 + 837: 48(f64vec3) FMul 835 836 + 838: 48(f64vec3) CompositeExtract 833 1 + 839: 48(f64vec3) CompositeExtract 834 1 + 840: 48(f64vec3) FMul 838 839 + 841: 755 CompositeConstruct 837 840 + Store 757(dmat2x3v) 841 + 842: 767 Load 769(dmat2x4v) + 843: 767 Load 769(dmat2x4v) + 844: 53(f64vec4) CompositeExtract 842 0 + 845: 53(f64vec4) CompositeExtract 843 0 + 846: 53(f64vec4) FMul 844 845 + 847: 53(f64vec4) CompositeExtract 842 1 + 848: 53(f64vec4) CompositeExtract 843 1 + 849: 53(f64vec4) FMul 847 848 + 850: 767 CompositeConstruct 846 849 + Store 769(dmat2x4v) 850 + 851: 761 Load 763(dmat3x2v) + 852: 761 Load 763(dmat3x2v) + 853: 43(f64vec2) CompositeExtract 851 0 + 854: 43(f64vec2) CompositeExtract 852 0 + 855: 43(f64vec2) FMul 853 854 + 856: 43(f64vec2) CompositeExtract 851 1 + 857: 43(f64vec2) CompositeExtract 852 1 + 858: 43(f64vec2) FMul 856 857 + 859: 43(f64vec2) CompositeExtract 851 2 + 860: 43(f64vec2) CompositeExtract 852 2 + 861: 43(f64vec2) FMul 859 860 + 862: 761 CompositeConstruct 855 858 861 + Store 763(dmat3x2v) 862 + 863: 779 Load 781(dmat3x4v) + 864: 779 Load 781(dmat3x4v) + 865: 53(f64vec4) CompositeExtract 863 0 + 866: 53(f64vec4) CompositeExtract 864 0 + 867: 53(f64vec4) FMul 865 866 + 868: 53(f64vec4) CompositeExtract 863 1 + 869: 53(f64vec4) CompositeExtract 864 1 + 870: 53(f64vec4) FMul 868 869 + 871: 53(f64vec4) CompositeExtract 863 2 + 872: 53(f64vec4) CompositeExtract 864 2 + 873: 53(f64vec4) FMul 871 872 + 874: 779 CompositeConstruct 867 870 873 + Store 781(dmat3x4v) 874 + 875: 773 Load 775(dmat4x2v) + 876: 773 Load 775(dmat4x2v) + 877: 43(f64vec2) CompositeExtract 875 0 + 878: 43(f64vec2) CompositeExtract 876 0 + 879: 43(f64vec2) FMul 877 878 + 880: 43(f64vec2) CompositeExtract 875 1 + 881: 43(f64vec2) CompositeExtract 876 1 + 882: 43(f64vec2) FMul 880 881 + 883: 43(f64vec2) CompositeExtract 875 2 + 884: 43(f64vec2) CompositeExtract 876 2 + 885: 43(f64vec2) FMul 883 884 + 886: 43(f64vec2) CompositeExtract 875 3 + 887: 43(f64vec2) CompositeExtract 876 3 + 888: 43(f64vec2) FMul 886 887 + 889: 773 CompositeConstruct 879 882 885 888 + Store 775(dmat4x2v) 889 + 890: 785 Load 787(dmat4x3v) + 891: 785 Load 787(dmat4x3v) + 892: 48(f64vec3) CompositeExtract 890 0 + 893: 48(f64vec3) CompositeExtract 891 0 + 894: 48(f64vec3) FMul 892 893 + 895: 48(f64vec3) CompositeExtract 890 1 + 896: 48(f64vec3) CompositeExtract 891 1 + 897: 48(f64vec3) FMul 895 896 + 898: 48(f64vec3) CompositeExtract 890 2 + 899: 48(f64vec3) CompositeExtract 891 2 + 900: 48(f64vec3) FMul 898 899 + 901: 48(f64vec3) CompositeExtract 890 3 + 902: 48(f64vec3) CompositeExtract 891 3 + 903: 48(f64vec3) FMul 901 902 + 904: 785 CompositeConstruct 894 897 900 903 + Store 787(dmat4x3v) 904 + 905: 737 Load 739(dmat2v) + 906: 737 Transpose 905 + 907: 737 Load 739(dmat2v) + 908: 737 MatrixTimesMatrix 907 906 + Store 739(dmat2v) 908 + 909: 743 Load 745(dmat3v) + 910: 743 Transpose 909 + 911: 743 Load 745(dmat3v) + 912: 743 MatrixTimesMatrix 911 910 + Store 745(dmat3v) 912 + 913: 749 Load 751(dmat4v) + 914: 749 Transpose 913 + 915: 749 Load 751(dmat4v) + 916: 749 MatrixTimesMatrix 915 914 + Store 751(dmat4v) 916 + 917: 761 Load 763(dmat3x2v) + 918: 755 Transpose 917 + Store 757(dmat2x3v) 918 + 919: 755 Load 757(dmat2x3v) + 920: 761 Transpose 919 + Store 763(dmat3x2v) 920 + 921: 773 Load 775(dmat4x2v) + 922: 767 Transpose 921 + Store 769(dmat2x4v) 922 + 923: 767 Load 769(dmat2x4v) + 924: 773 Transpose 923 + Store 775(dmat4x2v) 924 + 925: 785 Load 787(dmat4x3v) + 926: 779 Transpose 925 + Store 781(dmat3x4v) 926 + 927: 779 Load 781(dmat3x4v) + 928: 785 Transpose 927 + Store 787(dmat4x3v) 928 + 929: 737 Load 739(dmat2v) + 930:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 929 + 931:39(float64_t) Load 41(doublev) + 932:39(float64_t) FAdd 931 930 + Store 41(doublev) 932 + 933: 743 Load 745(dmat3v) + 934:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 933 + 935:39(float64_t) Load 41(doublev) + 936:39(float64_t) FAdd 935 934 + Store 41(doublev) 936 + 937: 749 Load 751(dmat4v) + 938:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 937 + 939:39(float64_t) Load 41(doublev) + 940:39(float64_t) FAdd 939 938 + Store 41(doublev) 940 + 941: 737 Load 739(dmat2v) + 942: 737 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 941 + 943: 737 Load 739(dmat2v) + 944: 737 MatrixTimesMatrix 943 942 + Store 739(dmat2v) 944 + 945: 743 Load 745(dmat3v) + 946: 743 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 945 + 947: 743 Load 745(dmat3v) + 948: 743 MatrixTimesMatrix 947 946 + Store 745(dmat3v) 948 + 949: 749 Load 751(dmat4v) + 950: 749 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 949 + 951: 749 Load 751(dmat4v) + 952: 749 MatrixTimesMatrix 951 950 + Store 751(dmat4v) 952 + 953:39(float64_t) Load 41(doublev) + 955: 40(ptr) AccessChain 45(dvec2v) 954 + 956:39(float64_t) Load 955 + 957:39(float64_t) FAdd 953 956 + 959: 40(ptr) AccessChain 50(dvec3v) 958 + 960:39(float64_t) Load 959 + 961:39(float64_t) FAdd 957 960 + 963: 40(ptr) AccessChain 55(dvec4v) 962 + 964:39(float64_t) Load 963 + 965:39(float64_t) FAdd 961 964 + 967: 40(ptr) AccessChain 739(dmat2v) 966 954 + 968:39(float64_t) Load 967 + 969:39(float64_t) FAdd 965 968 + 971: 40(ptr) AccessChain 745(dmat3v) 970 958 + 972:39(float64_t) Load 971 + 973:39(float64_t) FAdd 969 972 + 974: 40(ptr) AccessChain 751(dmat4v) 25 962 + 975:39(float64_t) Load 974 + 976:39(float64_t) FAdd 973 975 + 977: 40(ptr) AccessChain 757(dmat2x3v) 966 954 + 978:39(float64_t) Load 977 + 979:39(float64_t) FAdd 976 978 + 980: 40(ptr) AccessChain 763(dmat3x2v) 966 954 + 981:39(float64_t) Load 980 + 982:39(float64_t) FAdd 979 981 + 983: 40(ptr) AccessChain 781(dmat3x4v) 970 958 + 984:39(float64_t) Load 983 + 985:39(float64_t) FAdd 982 984 + 986: 40(ptr) AccessChain 787(dmat4x3v) 970 958 + 987:39(float64_t) Load 986 + 988:39(float64_t) FAdd 985 987 + 989: 40(ptr) AccessChain 769(dmat2x4v) 966 954 + 990:39(float64_t) Load 989 + 991:39(float64_t) FAdd 988 990 + 992: 40(ptr) AccessChain 775(dmat4x2v) 966 954 + 993:39(float64_t) Load 992 + 994:39(float64_t) FAdd 991 993 + 995: 428(bool) Load 430(boolv) + 997: 10(float) Select 995 996 21 + 998:39(float64_t) FConvert 997 + 999:39(float64_t) FAdd 994 998 + 1000: 429(ptr) AccessChain 439(bvec2v) 33 + 1001: 428(bool) Load 1000 + 1002: 10(float) Select 1001 996 21 + 1003:39(float64_t) FConvert 1002 + 1004:39(float64_t) FAdd 999 1003 + 1005: 429(ptr) AccessChain 448(bvec3v) 33 + 1006: 428(bool) Load 1005 + 1007: 10(float) Select 1006 996 21 + 1008:39(float64_t) FConvert 1007 + 1009:39(float64_t) FAdd 1004 1008 + 1010: 429(ptr) AccessChain 457(bvec4v) 33 + 1011: 428(bool) Load 1010 + 1012: 10(float) Select 1011 996 21 + 1013:39(float64_t) FConvert 1012 + 1014:39(float64_t) FAdd 1009 1013 + 1015: 10(float) FConvert 1014 + 1016: 11(fvec4) Load 13(outp) + 1017: 11(fvec4) VectorTimesScalar 1016 1015 + Store 13(outp) 1017 + Return + FunctionEnd diff --git a/Test/runtests b/Test/runtests index cc343060..c50f1482 100755 --- a/Test/runtests +++ b/Test/runtests @@ -239,6 +239,13 @@ $EXE -D -E hlsl.pp.expand.frag > $TARGETDIR/hlsl.pp.expand.frag.out 2> $TARGETDI diff -b $BASEDIR/hlsl.pp.expand.frag.out $TARGETDIR/hlsl.pp.expand.frag.out || HASERROR=1 diff -b $BASEDIR/hlsl.pp.expand.frag.err $TARGETDIR/hlsl.pp.expand.frag.err || HASERROR=1 +# +# Test --nan-clamp +# +echo "Testing nan-clamp" +$EXE --nan-clamp -H --aml --amb spv.400.frag > $TARGETDIR/spv.400.frag.nanclamp.out +diff -b $BASEDIR/spv.400.frag.nanclamp.out $TARGETDIR/spv.400.frag.nanclamp.out || HASERROR=1 + # # Final checking # diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 6f9db019..c7e8a342 100755 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -1791,6 +1791,7 @@ void TShader::setUniformLocationBase(int base) void TShader::setHlslIoMapping(bool hlslIoMap) { intermediate->setHlslIoMapping(hlslIoMap); } void TShader::setFlattenUniformArrays(bool flatten) { intermediate->setFlattenUniformArrays(flatten); } void TShader::setNoStorageFormat(bool useUnknownFormat) { intermediate->setNoStorageFormat(useUnknownFormat); } +void TShader::setNanMinMaxClamp(bool useNonNan) { intermediate->setNanMinMaxClamp(useNonNan); } void TShader::setResourceSetBinding(const std::vector& base) { intermediate->setResourceSetBinding(base); } void TShader::setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { intermediate->setTextureSamplerTransformMode(mode); } diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 30ba98db..7b8bf7ff 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -266,7 +266,8 @@ public: needToLegalize(false), binaryDoubleOutput(false), usePhysicalStorageBuffer(false), - uniformLocationBase(0) + uniformLocationBase(0), + nanMinMaxClamp(false) { localSize[0] = 1; localSize[1] = 1; @@ -767,6 +768,9 @@ public: void setUniformLocationBase(int base) { uniformLocationBase = base; } int getUniformLocationBase() const { return uniformLocationBase; } + void setNanMinMaxClamp(bool setting) { nanMinMaxClamp = setting; } + bool getNanMinMaxClamp() const { return nanMinMaxClamp; } + void setNeedsLegalization() { needToLegalize = true; } bool needsLegalization() const { return needToLegalize; } @@ -900,6 +904,7 @@ protected: std::unordered_map uniformLocationOverrides; int uniformLocationBase; + bool nanMinMaxClamp; // true if desiring min/max/clamp to favor non-NaN over NaN private: void operator=(TIntermediate&); // prevent assignments diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 33f05e2c..9d4ec675 100755 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -435,6 +435,7 @@ public: void setHlslIoMapping(bool hlslIoMap); void setFlattenUniformArrays(bool flatten); void setNoStorageFormat(bool useUnknownFormat); + void setNanMinMaxClamp(bool nanMinMaxClamp); void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode); // For setting up the environment (cleared to nothingness in the constructor). From 11805e41d992a9950a9f7f84c505bb7305fbd09f Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Tue, 18 Jun 2019 00:33:46 -0600 Subject: [PATCH 13/42] Bump revision. --- 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 bbcbba4b..92f93055 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 3269 +#define GLSLANG_PATCH_LEVEL 3274 From 9c14f77f5dba25911beccbef98f13a06e7197838 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Mon, 17 Jun 2019 08:38:35 -0600 Subject: [PATCH 14/42] AST/SPV: Fix #930: translate uvec4 <-> uint64 for SubgroupGeMask et. al. On reading built-in variables SubgroupEqMask, SubgroupGeMask, SubgroupGtMask, SubgroupLeMask, and SubgroupLtMask, the AST expects 64-bit ints, while SPIR-V is defined as vectors of 32-bit ints. The declaration type has to be translated in the opposite direction. --- SPIRV/GlslangToSpv.cpp | 115 +++- Test/baseResults/spv.shaderBallot.comp.out | 679 +++++++++++---------- 2 files changed, 450 insertions(+), 344 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 4f58c4f5..16d90b89 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -138,7 +138,7 @@ protected: spv::LoopControlMask TranslateLoopControl(const glslang::TIntermLoop&, std::vector& operands) const; spv::StorageClass TranslateStorageClass(const glslang::TType&); void addIndirectionIndexCapabilities(const glslang::TType& baseType, const glslang::TType& indexType); - spv::Id createSpvVariable(const glslang::TIntermSymbol*); + spv::Id createSpvVariable(const glslang::TIntermSymbol*, spv::Id forcedType); spv::Id getSampledType(const glslang::TSampler&); spv::Id getInvertedSwizzleType(const glslang::TIntermTyped&); spv::Id createInvertedSwizzle(spv::Decoration precision, const glslang::TIntermTyped&, spv::Id parentResult); @@ -208,6 +208,8 @@ protected: if (builder.getSpvVersion() < glslang::EShTargetSpv_1_3) builder.addExtension(ext); } + std::pair getForcedType(spv::BuiltIn, const glslang::TType&); + spv::Id translateForcedType(spv::Id object); glslang::SpvOptions& options; spv::Function* shaderEntry; @@ -238,6 +240,10 @@ protected: std::unordered_map counterOriginator; // Map pointee types for EbtReference to their forward pointers std::map forwardPointers; + // Type forcing, for when SPIR-V wants a different type than the AST, + // requiring local translation to and from SPIR-V type on every access. + // Maps AST-required-type-id> + std::unordered_map forceType; }; // @@ -733,27 +739,27 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI case glslang::EbvSubGroupEqMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupEqMaskKHR; + return spv::BuiltInSubgroupEqMask; case glslang::EbvSubGroupGeMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupGeMaskKHR; + return spv::BuiltInSubgroupGeMask; case glslang::EbvSubGroupGtMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupGtMaskKHR; + return spv::BuiltInSubgroupGtMask; case glslang::EbvSubGroupLeMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupLeMaskKHR; + return spv::BuiltInSubgroupLeMask; case glslang::EbvSubGroupLtMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupLtMaskKHR; + return spv::BuiltInSubgroupLtMask; case glslang::EbvNumSubgroups: builder.addCapability(spv::CapabilityGroupNonUniform); @@ -795,6 +801,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI builder.addCapability(spv::CapabilityGroupNonUniform); builder.addCapability(spv::CapabilityGroupNonUniformBallot); return spv::BuiltInSubgroupLtMask; + #ifdef AMD_EXTENSIONS case glslang::EbvBaryCoordNoPersp: builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); @@ -1620,8 +1627,8 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) // Formal function parameters were mapped during makeFunctions(). spv::Id id = getSymbolId(symbol); - // Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction if (builder.isPointer(id)) { + // Include all "static use" and "linkage only" interface variables on the OpEntryPoint instruction // Consider adding to the OpEntryPoint interface list. // Only looking at structures if they have at least one member. if (!symbol->getType().isStruct() || symbol->getType().getStruct()->size() > 0) { @@ -1633,6 +1640,14 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) iOSet.insert(id); } } + + // If the SPIR-V type is required to be different than the AST type, + // translate now from the SPIR-V type to the AST type, for the consuming + // operation. + // Note this turns it from an l-value to an r-value. + // Currently, all symbols needing this are inputs; avoid the map lookup when non-input. + if (symbol->getType().getQualifier().storage == glslang::EvqVaryingIn) + id = translateForcedType(id); } // Only process non-linkage-only nodes for generating actual static uses @@ -1650,8 +1665,10 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) // See comments in handleUserFunctionCall(). // B) Specialization constants (normal constants don't even come in as a variable), // These are also pure R-values. + // C) R-Values from type translation, see above call to translateForcedType() glslang::TQualifier qualifier = symbol->getQualifier(); - if (qualifier.isSpecConstant() || rValueParameters.find(symbol->getId()) != rValueParameters.end()) + if (qualifier.isSpecConstant() || rValueParameters.find(symbol->getId()) != rValueParameters.end() || + !builder.isPointerType(builder.getTypeId(id))) builder.setAccessChainRValue(id); else builder.setAccessChainLValue(id); @@ -1908,6 +1925,71 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T } } +// Figure out what, if any, type changes are needed when accessing a specific built-in. +// Returns . +// Also see comment for 'forceType', regarding tracking SPIR-V-required types. +std::pair TGlslangToSpvTraverser::getForcedType(spv::BuiltIn builtIn, + const glslang::TType& glslangType) +{ + switch(builtIn) + { + case spv::BuiltInSubgroupEqMask: + case spv::BuiltInSubgroupGeMask: + case spv::BuiltInSubgroupGtMask: + case spv::BuiltInSubgroupLeMask: + case spv::BuiltInSubgroupLtMask: { + // these require changing a 64-bit scaler -> a vector of 32-bit components + if (glslangType.isVector()) + break; + std::pair ret(builder.makeVectorType(builder.makeUintType(32), 4), + builder.makeUintType(64)); + return ret; + } + default: + break; + } + + std::pair ret(spv::NoType, spv::NoType); + return ret; +} + +// For an object previously identified (see getForcedType() and forceType) +// as needing type translations, do the translation needed for a load, turning +// an L-value into in R-value. +spv::Id TGlslangToSpvTraverser::translateForcedType(spv::Id object) +{ + const auto forceIt = forceType.find(object); + if (forceIt == forceType.end()) + return object; + + spv::Id desiredTypeId = forceIt->second; + spv::Id objectTypeId = builder.getTypeId(object); + assert(builder.isPointerType(objectTypeId)); + objectTypeId = builder.getContainedTypeId(objectTypeId); + if (builder.isVectorType(objectTypeId) && + builder.getScalarTypeWidth(builder.getContainedTypeId(objectTypeId)) == 32) { + if (builder.getScalarTypeWidth(desiredTypeId) == 64) { + // handle 32-bit v.xy* -> 64-bit + builder.clearAccessChain(); + builder.setAccessChainLValue(object); + object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, objectTypeId); + std::vector components; + components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 0)); + components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 1)); + + spv::Id vecType = builder.makeVectorType(builder.getContainedTypeId(objectTypeId), 2); + return builder.createUnaryOp(spv::OpBitcast, desiredTypeId, + builder.createCompositeConstruct(vecType, components)); + } else { + logger->missingFunctionality("forcing 32-bit vector type to non 64-bit scalar"); + } + } else { + logger->missingFunctionality("forcing non 32-bit vector type"); + } + + return object; +} + bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TIntermUnary* node) { builder.setLine(node->getLoc().line, node->getLoc().getFilename()); @@ -3037,7 +3119,7 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T return false; } -spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* node) +spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* node, spv::Id forcedType) { // First, steer off constants, which are not SPIR-V variables, but // can still have a mapping to a SPIR-V Id. @@ -3050,7 +3132,8 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* // Now, handle actual variables spv::StorageClass storageClass = TranslateStorageClass(node->getType()); - spv::Id spvType = convertGlslangToSpvType(node->getType()); + spv::Id spvType = forcedType == spv::NoType ? convertGlslangToSpvType(node->getType()) + : forcedType; const bool contains16BitType = node->getType().containsBasicType(glslang::EbtFloat16) || node->getType().containsBasicType(glslang::EbtInt16) || @@ -7543,8 +7626,12 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol } // it was not found, create it - id = createSpvVariable(symbol); + spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false); + auto forcedType = getForcedType(builtIn, symbol->getType()); + id = createSpvVariable(symbol, forcedType.first); symbolValues[symbol->getId()] = id; + if (forcedType.second != spv::NoType) + forceType[id] = forcedType.second; if (symbol->getBasicType() != glslang::EbtBlock) { builder.addDecoration(id, TranslatePrecisionDecoration(symbol->getType())); @@ -7604,10 +7691,10 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol builder.addDecoration(id, memory[i]); } - // built-in variable decorations - spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false); - if (builtIn != spv::BuiltInMax) + // add built-in variable decoration + if (builtIn != spv::BuiltInMax) { builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn); + } // nonuniform builder.addDecoration(id, TranslateNonUniformDecoration(symbol->getType().getQualifier())); diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out index d25eec7e..1c616ee5 100644 --- a/Test/baseResults/spv.shaderBallot.comp.out +++ b/Test/baseResults/spv.shaderBallot.comp.out @@ -1,8 +1,7 @@ spv.shaderBallot.comp -Validation failed // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 298 +// Id's are bound by 318 Capability Shader Capability Int64 @@ -10,7 +9,7 @@ Validation failed Extension "SPV_KHR_shader_ballot" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint GLCompute 4 "main" 10 12 21 23 26 29 32 + EntryPoint GLCompute 4 "main" 10 12 22 29 36 43 50 ExecutionMode 4 LocalSize 8 8 1 Source GLSL 450 SourceExtension "GL_ARB_gpu_shader_int64" @@ -20,30 +19,30 @@ Validation failed Name 10 "gl_SubGroupInvocationARB" Name 12 "gl_SubGroupSizeARB" Name 19 "relMask" - Name 21 "gl_SubGroupEqMaskARB" - Name 23 "gl_SubGroupGeMaskARB" - Name 26 "gl_SubGroupGtMaskARB" - Name 29 "gl_SubGroupLeMaskARB" - Name 32 "gl_SubGroupLtMaskARB" - Name 52 "Buffers" - MemberName 52(Buffers) 0 "f4" - MemberName 52(Buffers) 1 "i4" - MemberName 52(Buffers) 2 "u4" - Name 55 "data" + Name 22 "gl_SubGroupEqMaskARB" + Name 29 "gl_SubGroupGeMaskARB" + Name 36 "gl_SubGroupGtMaskARB" + Name 43 "gl_SubGroupLeMaskARB" + Name 50 "gl_SubGroupLtMaskARB" + Name 72 "Buffers" + MemberName 72(Buffers) 0 "f4" + MemberName 72(Buffers) 1 "i4" + MemberName 72(Buffers) 2 "u4" + Name 75 "data" Decorate 10(gl_SubGroupInvocationARB) BuiltIn SubgroupLocalInvocationId Decorate 12(gl_SubGroupSizeARB) BuiltIn SubgroupSize - Decorate 21(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR - Decorate 23(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR - Decorate 26(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR - Decorate 29(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR - Decorate 32(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR - MemberDecorate 52(Buffers) 0 Offset 0 - MemberDecorate 52(Buffers) 1 Offset 16 - MemberDecorate 52(Buffers) 2 Offset 32 - Decorate 52(Buffers) BufferBlock - Decorate 55(data) DescriptorSet 0 - Decorate 55(data) Binding 0 - Decorate 297 BuiltIn WorkgroupSize + Decorate 22(gl_SubGroupEqMaskARB) BuiltIn SubgroupEqMaskKHR + Decorate 29(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR + Decorate 36(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR + Decorate 43(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR + Decorate 50(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR + MemberDecorate 72(Buffers) 0 Offset 0 + MemberDecorate 72(Buffers) 1 Offset 16 + MemberDecorate 72(Buffers) 2 Offset 32 + Decorate 72(Buffers) BufferBlock + Decorate 75(data) DescriptorSet 0 + Decorate 75(data) Binding 0 + Decorate 317 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -54,43 +53,43 @@ Validation failed 15: 6(int) Constant 4 17: TypeInt 64 0 18: TypePointer Function 17(int64_t) - 20: TypePointer Input 17(int64_t) -21(gl_SubGroupEqMaskARB): 20(ptr) Variable Input -23(gl_SubGroupGeMaskARB): 20(ptr) Variable Input -26(gl_SubGroupGtMaskARB): 20(ptr) Variable Input -29(gl_SubGroupLeMaskARB): 20(ptr) Variable Input -32(gl_SubGroupLtMaskARB): 20(ptr) Variable Input - 36: TypeBool - 37: 36(bool) ConstantTrue - 38: TypeVector 6(int) 4 - 42: TypeVector 6(int) 2 - 48: TypeFloat 32 - 49: TypeVector 48(float) 4 - 50: TypeInt 32 1 - 51: TypeVector 50(int) 4 - 52(Buffers): TypeStruct 49(fvec4) 51(ivec4) 38(ivec4) - 53: TypeArray 52(Buffers) 15 - 54: TypePointer Uniform 53 - 55(data): 54(ptr) Variable Uniform - 57: 50(int) Constant 0 - 58: 6(int) Constant 0 - 59: TypePointer Uniform 48(float) - 66: 50(int) Constant 1 - 67: TypeVector 48(float) 2 - 68: TypePointer Uniform 49(fvec4) - 82: 50(int) Constant 2 - 83: TypeVector 48(float) 3 - 99: 50(int) Constant 3 - 114: TypePointer Uniform 50(int) - 121: TypeVector 50(int) 2 - 122: TypePointer Uniform 51(ivec4) - 136: TypeVector 50(int) 3 - 166: TypePointer Uniform 6(int) - 173: TypePointer Uniform 38(ivec4) - 187: TypeVector 6(int) 3 - 295: 6(int) Constant 8 - 296: 6(int) Constant 1 - 297: 187(ivec3) ConstantComposite 295 295 296 + 20: TypeVector 6(int) 4 + 21: TypePointer Input 20(ivec4) +22(gl_SubGroupEqMaskARB): 21(ptr) Variable Input + 26: TypeVector 6(int) 2 +29(gl_SubGroupGeMaskARB): 21(ptr) Variable Input +36(gl_SubGroupGtMaskARB): 21(ptr) Variable Input +43(gl_SubGroupLeMaskARB): 21(ptr) Variable Input +50(gl_SubGroupLtMaskARB): 21(ptr) Variable Input + 58: TypeBool + 59: 58(bool) ConstantTrue + 68: TypeFloat 32 + 69: TypeVector 68(float) 4 + 70: TypeInt 32 1 + 71: TypeVector 70(int) 4 + 72(Buffers): TypeStruct 69(fvec4) 71(ivec4) 20(ivec4) + 73: TypeArray 72(Buffers) 15 + 74: TypePointer Uniform 73 + 75(data): 74(ptr) Variable Uniform + 77: 70(int) Constant 0 + 78: 6(int) Constant 0 + 79: TypePointer Uniform 68(float) + 86: 70(int) Constant 1 + 87: TypeVector 68(float) 2 + 88: TypePointer Uniform 69(fvec4) + 102: 70(int) Constant 2 + 103: TypeVector 68(float) 3 + 119: 70(int) Constant 3 + 134: TypePointer Uniform 70(int) + 141: TypeVector 70(int) 2 + 142: TypePointer Uniform 71(ivec4) + 156: TypeVector 70(int) 3 + 186: TypePointer Uniform 6(int) + 193: TypePointer Uniform 20(ivec4) + 207: TypeVector 6(int) 3 + 315: 6(int) Constant 8 + 316: 6(int) Constant 1 + 317: 207(ivec3) ConstantComposite 315 315 316 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -100,275 +99,295 @@ Validation failed 14: 6(int) IAdd 11 13 16: 6(int) UMod 14 15 Store 8(invocation) 16 - 22: 17(int64_t) Load 21(gl_SubGroupEqMaskARB) - 24: 17(int64_t) Load 23(gl_SubGroupGeMaskARB) - 25: 17(int64_t) IAdd 22 24 - 27: 17(int64_t) Load 26(gl_SubGroupGtMaskARB) - 28: 17(int64_t) IAdd 25 27 - 30: 17(int64_t) Load 29(gl_SubGroupLeMaskARB) - 31: 17(int64_t) IAdd 28 30 - 33: 17(int64_t) Load 32(gl_SubGroupLtMaskARB) - 34: 17(int64_t) IAdd 31 33 - Store 19(relMask) 34 - 35: 17(int64_t) Load 19(relMask) - 39: 38(ivec4) SubgroupBallotKHR 37 - 40: 6(int) CompositeExtract 39 0 - 41: 6(int) CompositeExtract 39 1 - 43: 42(ivec2) CompositeConstruct 40 41 - 44: 17(int64_t) Bitcast 43 - 45: 36(bool) IEqual 35 44 - SelectionMerge 47 None - BranchConditional 45 46 216 - 46: Label - 56: 6(int) Load 8(invocation) - 60: 59(ptr) AccessChain 55(data) 57 57 58 - 61: 48(float) Load 60 - 62: 6(int) Load 8(invocation) - 63: 48(float) SubgroupReadInvocationKHR 61 62 - 64: 59(ptr) AccessChain 55(data) 56 57 58 - Store 64 63 - 65: 6(int) Load 8(invocation) - 69: 68(ptr) AccessChain 55(data) 66 57 - 70: 49(fvec4) Load 69 - 71: 67(fvec2) VectorShuffle 70 70 0 1 - 72: 6(int) Load 8(invocation) - 73: 48(float) CompositeExtract 71 0 - 74: 48(float) SubgroupReadInvocationKHR 73 72 - 75: 48(float) CompositeExtract 71 1 - 76: 48(float) SubgroupReadInvocationKHR 75 72 - 77: 67(fvec2) CompositeConstruct 74 76 - 78: 68(ptr) AccessChain 55(data) 65 57 - 79: 49(fvec4) Load 78 - 80: 49(fvec4) VectorShuffle 79 77 4 5 2 3 - Store 78 80 - 81: 6(int) Load 8(invocation) - 84: 68(ptr) AccessChain 55(data) 82 57 - 85: 49(fvec4) Load 84 - 86: 83(fvec3) VectorShuffle 85 85 0 1 2 - 87: 6(int) Load 8(invocation) - 88: 48(float) CompositeExtract 86 0 - 89: 48(float) SubgroupReadInvocationKHR 88 87 - 90: 48(float) CompositeExtract 86 1 - 91: 48(float) SubgroupReadInvocationKHR 90 87 - 92: 48(float) CompositeExtract 86 2 - 93: 48(float) SubgroupReadInvocationKHR 92 87 - 94: 83(fvec3) CompositeConstruct 89 91 93 - 95: 68(ptr) AccessChain 55(data) 81 57 - 96: 49(fvec4) Load 95 - 97: 49(fvec4) VectorShuffle 96 94 4 5 6 3 - Store 95 97 - 98: 6(int) Load 8(invocation) - 100: 68(ptr) AccessChain 55(data) 99 57 - 101: 49(fvec4) Load 100 - 102: 6(int) Load 8(invocation) - 103: 48(float) CompositeExtract 101 0 - 104: 48(float) SubgroupReadInvocationKHR 103 102 - 105: 48(float) CompositeExtract 101 1 - 106: 48(float) SubgroupReadInvocationKHR 105 102 - 107: 48(float) CompositeExtract 101 2 - 108: 48(float) SubgroupReadInvocationKHR 107 102 - 109: 48(float) CompositeExtract 101 3 - 110: 48(float) SubgroupReadInvocationKHR 109 102 - 111: 49(fvec4) CompositeConstruct 104 106 108 110 - 112: 68(ptr) AccessChain 55(data) 98 57 - Store 112 111 - 113: 6(int) Load 8(invocation) - 115: 114(ptr) AccessChain 55(data) 57 66 58 - 116: 50(int) Load 115 - 117: 6(int) Load 8(invocation) - 118: 50(int) SubgroupReadInvocationKHR 116 117 - 119: 114(ptr) AccessChain 55(data) 113 66 58 - Store 119 118 - 120: 6(int) Load 8(invocation) - 123: 122(ptr) AccessChain 55(data) 66 66 - 124: 51(ivec4) Load 123 - 125: 121(ivec2) VectorShuffle 124 124 0 1 - 126: 6(int) Load 8(invocation) - 127: 50(int) CompositeExtract 125 0 - 128: 50(int) SubgroupReadInvocationKHR 127 126 - 129: 50(int) CompositeExtract 125 1 - 130: 50(int) SubgroupReadInvocationKHR 129 126 - 131: 121(ivec2) CompositeConstruct 128 130 - 132: 122(ptr) AccessChain 55(data) 120 66 - 133: 51(ivec4) Load 132 - 134: 51(ivec4) VectorShuffle 133 131 4 5 2 3 - Store 132 134 - 135: 6(int) Load 8(invocation) - 137: 122(ptr) AccessChain 55(data) 82 66 - 138: 51(ivec4) Load 137 - 139: 136(ivec3) VectorShuffle 138 138 0 1 2 + 23: 20(ivec4) Load 22(gl_SubGroupEqMaskARB) + 24: 6(int) CompositeExtract 23 0 + 25: 6(int) CompositeExtract 23 1 + 27: 26(ivec2) CompositeConstruct 24 25 + 28: 17(int64_t) Bitcast 27 + 30: 20(ivec4) Load 29(gl_SubGroupGeMaskARB) + 31: 6(int) CompositeExtract 30 0 + 32: 6(int) CompositeExtract 30 1 + 33: 26(ivec2) CompositeConstruct 31 32 + 34: 17(int64_t) Bitcast 33 + 35: 17(int64_t) IAdd 28 34 + 37: 20(ivec4) Load 36(gl_SubGroupGtMaskARB) + 38: 6(int) CompositeExtract 37 0 + 39: 6(int) CompositeExtract 37 1 + 40: 26(ivec2) CompositeConstruct 38 39 + 41: 17(int64_t) Bitcast 40 + 42: 17(int64_t) IAdd 35 41 + 44: 20(ivec4) Load 43(gl_SubGroupLeMaskARB) + 45: 6(int) CompositeExtract 44 0 + 46: 6(int) CompositeExtract 44 1 + 47: 26(ivec2) CompositeConstruct 45 46 + 48: 17(int64_t) Bitcast 47 + 49: 17(int64_t) IAdd 42 48 + 51: 20(ivec4) Load 50(gl_SubGroupLtMaskARB) + 52: 6(int) CompositeExtract 51 0 + 53: 6(int) CompositeExtract 51 1 + 54: 26(ivec2) CompositeConstruct 52 53 + 55: 17(int64_t) Bitcast 54 + 56: 17(int64_t) IAdd 49 55 + Store 19(relMask) 56 + 57: 17(int64_t) Load 19(relMask) + 60: 20(ivec4) SubgroupBallotKHR 59 + 61: 6(int) CompositeExtract 60 0 + 62: 6(int) CompositeExtract 60 1 + 63: 26(ivec2) CompositeConstruct 61 62 + 64: 17(int64_t) Bitcast 63 + 65: 58(bool) IEqual 57 64 + SelectionMerge 67 None + BranchConditional 65 66 236 + 66: Label + 76: 6(int) Load 8(invocation) + 80: 79(ptr) AccessChain 75(data) 77 77 78 + 81: 68(float) Load 80 + 82: 6(int) Load 8(invocation) + 83: 68(float) SubgroupReadInvocationKHR 81 82 + 84: 79(ptr) AccessChain 75(data) 76 77 78 + Store 84 83 + 85: 6(int) Load 8(invocation) + 89: 88(ptr) AccessChain 75(data) 86 77 + 90: 69(fvec4) Load 89 + 91: 87(fvec2) VectorShuffle 90 90 0 1 + 92: 6(int) Load 8(invocation) + 93: 68(float) CompositeExtract 91 0 + 94: 68(float) SubgroupReadInvocationKHR 93 92 + 95: 68(float) CompositeExtract 91 1 + 96: 68(float) SubgroupReadInvocationKHR 95 92 + 97: 87(fvec2) CompositeConstruct 94 96 + 98: 88(ptr) AccessChain 75(data) 85 77 + 99: 69(fvec4) Load 98 + 100: 69(fvec4) VectorShuffle 99 97 4 5 2 3 + Store 98 100 + 101: 6(int) Load 8(invocation) + 104: 88(ptr) AccessChain 75(data) 102 77 + 105: 69(fvec4) Load 104 + 106: 103(fvec3) VectorShuffle 105 105 0 1 2 + 107: 6(int) Load 8(invocation) + 108: 68(float) CompositeExtract 106 0 + 109: 68(float) SubgroupReadInvocationKHR 108 107 + 110: 68(float) CompositeExtract 106 1 + 111: 68(float) SubgroupReadInvocationKHR 110 107 + 112: 68(float) CompositeExtract 106 2 + 113: 68(float) SubgroupReadInvocationKHR 112 107 + 114: 103(fvec3) CompositeConstruct 109 111 113 + 115: 88(ptr) AccessChain 75(data) 101 77 + 116: 69(fvec4) Load 115 + 117: 69(fvec4) VectorShuffle 116 114 4 5 6 3 + Store 115 117 + 118: 6(int) Load 8(invocation) + 120: 88(ptr) AccessChain 75(data) 119 77 + 121: 69(fvec4) Load 120 + 122: 6(int) Load 8(invocation) + 123: 68(float) CompositeExtract 121 0 + 124: 68(float) SubgroupReadInvocationKHR 123 122 + 125: 68(float) CompositeExtract 121 1 + 126: 68(float) SubgroupReadInvocationKHR 125 122 + 127: 68(float) CompositeExtract 121 2 + 128: 68(float) SubgroupReadInvocationKHR 127 122 + 129: 68(float) CompositeExtract 121 3 + 130: 68(float) SubgroupReadInvocationKHR 129 122 + 131: 69(fvec4) CompositeConstruct 124 126 128 130 + 132: 88(ptr) AccessChain 75(data) 118 77 + Store 132 131 + 133: 6(int) Load 8(invocation) + 135: 134(ptr) AccessChain 75(data) 77 86 78 + 136: 70(int) Load 135 + 137: 6(int) Load 8(invocation) + 138: 70(int) SubgroupReadInvocationKHR 136 137 + 139: 134(ptr) AccessChain 75(data) 133 86 78 + Store 139 138 140: 6(int) Load 8(invocation) - 141: 50(int) CompositeExtract 139 0 - 142: 50(int) SubgroupReadInvocationKHR 141 140 - 143: 50(int) CompositeExtract 139 1 - 144: 50(int) SubgroupReadInvocationKHR 143 140 - 145: 50(int) CompositeExtract 139 2 - 146: 50(int) SubgroupReadInvocationKHR 145 140 - 147: 136(ivec3) CompositeConstruct 142 144 146 - 148: 122(ptr) AccessChain 55(data) 135 66 - 149: 51(ivec4) Load 148 - 150: 51(ivec4) VectorShuffle 149 147 4 5 6 3 - Store 148 150 - 151: 6(int) Load 8(invocation) - 152: 122(ptr) AccessChain 55(data) 99 66 - 153: 51(ivec4) Load 152 - 154: 6(int) Load 8(invocation) - 155: 50(int) CompositeExtract 153 0 - 156: 50(int) SubgroupReadInvocationKHR 155 154 - 157: 50(int) CompositeExtract 153 1 - 158: 50(int) SubgroupReadInvocationKHR 157 154 - 159: 50(int) CompositeExtract 153 2 - 160: 50(int) SubgroupReadInvocationKHR 159 154 - 161: 50(int) CompositeExtract 153 3 - 162: 50(int) SubgroupReadInvocationKHR 161 154 - 163: 51(ivec4) CompositeConstruct 156 158 160 162 - 164: 122(ptr) AccessChain 55(data) 151 66 - Store 164 163 - 165: 6(int) Load 8(invocation) - 167: 166(ptr) AccessChain 55(data) 57 82 58 - 168: 6(int) Load 167 - 169: 6(int) Load 8(invocation) - 170: 6(int) SubgroupReadInvocationKHR 168 169 - 171: 166(ptr) AccessChain 55(data) 165 82 58 - Store 171 170 - 172: 6(int) Load 8(invocation) - 174: 173(ptr) AccessChain 55(data) 66 82 - 175: 38(ivec4) Load 174 - 176: 42(ivec2) VectorShuffle 175 175 0 1 - 177: 6(int) Load 8(invocation) - 178: 6(int) CompositeExtract 176 0 - 179: 6(int) SubgroupReadInvocationKHR 178 177 - 180: 6(int) CompositeExtract 176 1 - 181: 6(int) SubgroupReadInvocationKHR 180 177 - 182: 42(ivec2) CompositeConstruct 179 181 - 183: 173(ptr) AccessChain 55(data) 172 82 - 184: 38(ivec4) Load 183 - 185: 38(ivec4) VectorShuffle 184 182 4 5 2 3 - Store 183 185 - 186: 6(int) Load 8(invocation) - 188: 173(ptr) AccessChain 55(data) 82 82 - 189: 38(ivec4) Load 188 - 190: 187(ivec3) VectorShuffle 189 189 0 1 2 - 191: 6(int) Load 8(invocation) - 192: 6(int) CompositeExtract 190 0 - 193: 6(int) SubgroupReadInvocationKHR 192 191 - 194: 6(int) CompositeExtract 190 1 - 195: 6(int) SubgroupReadInvocationKHR 194 191 - 196: 6(int) CompositeExtract 190 2 - 197: 6(int) SubgroupReadInvocationKHR 196 191 - 198: 187(ivec3) CompositeConstruct 193 195 197 - 199: 173(ptr) AccessChain 55(data) 186 82 - 200: 38(ivec4) Load 199 - 201: 38(ivec4) VectorShuffle 200 198 4 5 6 3 - Store 199 201 - 202: 6(int) Load 8(invocation) - 203: 173(ptr) AccessChain 55(data) 99 82 - 204: 38(ivec4) Load 203 - 205: 6(int) Load 8(invocation) - 206: 6(int) CompositeExtract 204 0 - 207: 6(int) SubgroupReadInvocationKHR 206 205 - 208: 6(int) CompositeExtract 204 1 - 209: 6(int) SubgroupReadInvocationKHR 208 205 - 210: 6(int) CompositeExtract 204 2 - 211: 6(int) SubgroupReadInvocationKHR 210 205 - 212: 6(int) CompositeExtract 204 3 - 213: 6(int) SubgroupReadInvocationKHR 212 205 - 214: 38(ivec4) CompositeConstruct 207 209 211 213 - 215: 173(ptr) AccessChain 55(data) 202 82 - Store 215 214 - Branch 47 - 216: Label - 217: 6(int) Load 8(invocation) - 218: 59(ptr) AccessChain 55(data) 57 57 58 - 219: 48(float) Load 218 - 220: 48(float) SubgroupFirstInvocationKHR 219 - 221: 59(ptr) AccessChain 55(data) 217 57 58 - Store 221 220 + 143: 142(ptr) AccessChain 75(data) 86 86 + 144: 71(ivec4) Load 143 + 145: 141(ivec2) VectorShuffle 144 144 0 1 + 146: 6(int) Load 8(invocation) + 147: 70(int) CompositeExtract 145 0 + 148: 70(int) SubgroupReadInvocationKHR 147 146 + 149: 70(int) CompositeExtract 145 1 + 150: 70(int) SubgroupReadInvocationKHR 149 146 + 151: 141(ivec2) CompositeConstruct 148 150 + 152: 142(ptr) AccessChain 75(data) 140 86 + 153: 71(ivec4) Load 152 + 154: 71(ivec4) VectorShuffle 153 151 4 5 2 3 + Store 152 154 + 155: 6(int) Load 8(invocation) + 157: 142(ptr) AccessChain 75(data) 102 86 + 158: 71(ivec4) Load 157 + 159: 156(ivec3) VectorShuffle 158 158 0 1 2 + 160: 6(int) Load 8(invocation) + 161: 70(int) CompositeExtract 159 0 + 162: 70(int) SubgroupReadInvocationKHR 161 160 + 163: 70(int) CompositeExtract 159 1 + 164: 70(int) SubgroupReadInvocationKHR 163 160 + 165: 70(int) CompositeExtract 159 2 + 166: 70(int) SubgroupReadInvocationKHR 165 160 + 167: 156(ivec3) CompositeConstruct 162 164 166 + 168: 142(ptr) AccessChain 75(data) 155 86 + 169: 71(ivec4) Load 168 + 170: 71(ivec4) VectorShuffle 169 167 4 5 6 3 + Store 168 170 + 171: 6(int) Load 8(invocation) + 172: 142(ptr) AccessChain 75(data) 119 86 + 173: 71(ivec4) Load 172 + 174: 6(int) Load 8(invocation) + 175: 70(int) CompositeExtract 173 0 + 176: 70(int) SubgroupReadInvocationKHR 175 174 + 177: 70(int) CompositeExtract 173 1 + 178: 70(int) SubgroupReadInvocationKHR 177 174 + 179: 70(int) CompositeExtract 173 2 + 180: 70(int) SubgroupReadInvocationKHR 179 174 + 181: 70(int) CompositeExtract 173 3 + 182: 70(int) SubgroupReadInvocationKHR 181 174 + 183: 71(ivec4) CompositeConstruct 176 178 180 182 + 184: 142(ptr) AccessChain 75(data) 171 86 + Store 184 183 + 185: 6(int) Load 8(invocation) + 187: 186(ptr) AccessChain 75(data) 77 102 78 + 188: 6(int) Load 187 + 189: 6(int) Load 8(invocation) + 190: 6(int) SubgroupReadInvocationKHR 188 189 + 191: 186(ptr) AccessChain 75(data) 185 102 78 + Store 191 190 + 192: 6(int) Load 8(invocation) + 194: 193(ptr) AccessChain 75(data) 86 102 + 195: 20(ivec4) Load 194 + 196: 26(ivec2) VectorShuffle 195 195 0 1 + 197: 6(int) Load 8(invocation) + 198: 6(int) CompositeExtract 196 0 + 199: 6(int) SubgroupReadInvocationKHR 198 197 + 200: 6(int) CompositeExtract 196 1 + 201: 6(int) SubgroupReadInvocationKHR 200 197 + 202: 26(ivec2) CompositeConstruct 199 201 + 203: 193(ptr) AccessChain 75(data) 192 102 + 204: 20(ivec4) Load 203 + 205: 20(ivec4) VectorShuffle 204 202 4 5 2 3 + Store 203 205 + 206: 6(int) Load 8(invocation) + 208: 193(ptr) AccessChain 75(data) 102 102 + 209: 20(ivec4) Load 208 + 210: 207(ivec3) VectorShuffle 209 209 0 1 2 + 211: 6(int) Load 8(invocation) + 212: 6(int) CompositeExtract 210 0 + 213: 6(int) SubgroupReadInvocationKHR 212 211 + 214: 6(int) CompositeExtract 210 1 + 215: 6(int) SubgroupReadInvocationKHR 214 211 + 216: 6(int) CompositeExtract 210 2 + 217: 6(int) SubgroupReadInvocationKHR 216 211 + 218: 207(ivec3) CompositeConstruct 213 215 217 + 219: 193(ptr) AccessChain 75(data) 206 102 + 220: 20(ivec4) Load 219 + 221: 20(ivec4) VectorShuffle 220 218 4 5 6 3 + Store 219 221 222: 6(int) Load 8(invocation) - 223: 68(ptr) AccessChain 55(data) 66 57 - 224: 49(fvec4) Load 223 - 225: 67(fvec2) VectorShuffle 224 224 0 1 - 226: 67(fvec2) SubgroupFirstInvocationKHR 225 - 227: 68(ptr) AccessChain 55(data) 222 57 - 228: 49(fvec4) Load 227 - 229: 49(fvec4) VectorShuffle 228 226 4 5 2 3 - Store 227 229 - 230: 6(int) Load 8(invocation) - 231: 68(ptr) AccessChain 55(data) 82 57 - 232: 49(fvec4) Load 231 - 233: 83(fvec3) VectorShuffle 232 232 0 1 2 - 234: 83(fvec3) SubgroupFirstInvocationKHR 233 - 235: 68(ptr) AccessChain 55(data) 230 57 - 236: 49(fvec4) Load 235 - 237: 49(fvec4) VectorShuffle 236 234 4 5 6 3 - Store 235 237 - 238: 6(int) Load 8(invocation) - 239: 68(ptr) AccessChain 55(data) 99 57 - 240: 49(fvec4) Load 239 - 241: 49(fvec4) SubgroupFirstInvocationKHR 240 - 242: 68(ptr) AccessChain 55(data) 238 57 - Store 242 241 - 243: 6(int) Load 8(invocation) - 244: 114(ptr) AccessChain 55(data) 57 66 58 - 245: 50(int) Load 244 - 246: 50(int) SubgroupFirstInvocationKHR 245 - 247: 114(ptr) AccessChain 55(data) 243 66 58 - Store 247 246 - 248: 6(int) Load 8(invocation) - 249: 122(ptr) AccessChain 55(data) 66 66 - 250: 51(ivec4) Load 249 - 251: 121(ivec2) VectorShuffle 250 250 0 1 - 252: 121(ivec2) SubgroupFirstInvocationKHR 251 - 253: 122(ptr) AccessChain 55(data) 248 66 - 254: 51(ivec4) Load 253 - 255: 51(ivec4) VectorShuffle 254 252 4 5 2 3 - Store 253 255 - 256: 6(int) Load 8(invocation) - 257: 122(ptr) AccessChain 55(data) 82 66 - 258: 51(ivec4) Load 257 - 259: 136(ivec3) VectorShuffle 258 258 0 1 2 - 260: 136(ivec3) SubgroupFirstInvocationKHR 259 - 261: 122(ptr) AccessChain 55(data) 256 66 - 262: 51(ivec4) Load 261 - 263: 51(ivec4) VectorShuffle 262 260 4 5 6 3 - Store 261 263 - 264: 6(int) Load 8(invocation) - 265: 122(ptr) AccessChain 55(data) 99 66 - 266: 51(ivec4) Load 265 - 267: 51(ivec4) SubgroupFirstInvocationKHR 266 - 268: 122(ptr) AccessChain 55(data) 264 66 - Store 268 267 - 269: 6(int) Load 8(invocation) - 270: 166(ptr) AccessChain 55(data) 57 82 58 - 271: 6(int) Load 270 - 272: 6(int) SubgroupFirstInvocationKHR 271 - 273: 166(ptr) AccessChain 55(data) 269 82 58 - Store 273 272 - 274: 6(int) Load 8(invocation) - 275: 173(ptr) AccessChain 55(data) 66 82 - 276: 38(ivec4) Load 275 - 277: 42(ivec2) VectorShuffle 276 276 0 1 - 278: 42(ivec2) SubgroupFirstInvocationKHR 277 - 279: 173(ptr) AccessChain 55(data) 274 82 - 280: 38(ivec4) Load 279 - 281: 38(ivec4) VectorShuffle 280 278 4 5 2 3 - Store 279 281 - 282: 6(int) Load 8(invocation) - 283: 173(ptr) AccessChain 55(data) 82 82 - 284: 38(ivec4) Load 283 - 285: 187(ivec3) VectorShuffle 284 284 0 1 2 - 286: 187(ivec3) SubgroupFirstInvocationKHR 285 - 287: 173(ptr) AccessChain 55(data) 282 82 - 288: 38(ivec4) Load 287 - 289: 38(ivec4) VectorShuffle 288 286 4 5 6 3 - Store 287 289 - 290: 6(int) Load 8(invocation) - 291: 173(ptr) AccessChain 55(data) 99 82 - 292: 38(ivec4) Load 291 - 293: 38(ivec4) SubgroupFirstInvocationKHR 292 - 294: 173(ptr) AccessChain 55(data) 290 82 - Store 294 293 - Branch 47 - 47: Label + 223: 193(ptr) AccessChain 75(data) 119 102 + 224: 20(ivec4) Load 223 + 225: 6(int) Load 8(invocation) + 226: 6(int) CompositeExtract 224 0 + 227: 6(int) SubgroupReadInvocationKHR 226 225 + 228: 6(int) CompositeExtract 224 1 + 229: 6(int) SubgroupReadInvocationKHR 228 225 + 230: 6(int) CompositeExtract 224 2 + 231: 6(int) SubgroupReadInvocationKHR 230 225 + 232: 6(int) CompositeExtract 224 3 + 233: 6(int) SubgroupReadInvocationKHR 232 225 + 234: 20(ivec4) CompositeConstruct 227 229 231 233 + 235: 193(ptr) AccessChain 75(data) 222 102 + Store 235 234 + Branch 67 + 236: Label + 237: 6(int) Load 8(invocation) + 238: 79(ptr) AccessChain 75(data) 77 77 78 + 239: 68(float) Load 238 + 240: 68(float) SubgroupFirstInvocationKHR 239 + 241: 79(ptr) AccessChain 75(data) 237 77 78 + Store 241 240 + 242: 6(int) Load 8(invocation) + 243: 88(ptr) AccessChain 75(data) 86 77 + 244: 69(fvec4) Load 243 + 245: 87(fvec2) VectorShuffle 244 244 0 1 + 246: 87(fvec2) SubgroupFirstInvocationKHR 245 + 247: 88(ptr) AccessChain 75(data) 242 77 + 248: 69(fvec4) Load 247 + 249: 69(fvec4) VectorShuffle 248 246 4 5 2 3 + Store 247 249 + 250: 6(int) Load 8(invocation) + 251: 88(ptr) AccessChain 75(data) 102 77 + 252: 69(fvec4) Load 251 + 253: 103(fvec3) VectorShuffle 252 252 0 1 2 + 254: 103(fvec3) SubgroupFirstInvocationKHR 253 + 255: 88(ptr) AccessChain 75(data) 250 77 + 256: 69(fvec4) Load 255 + 257: 69(fvec4) VectorShuffle 256 254 4 5 6 3 + Store 255 257 + 258: 6(int) Load 8(invocation) + 259: 88(ptr) AccessChain 75(data) 119 77 + 260: 69(fvec4) Load 259 + 261: 69(fvec4) SubgroupFirstInvocationKHR 260 + 262: 88(ptr) AccessChain 75(data) 258 77 + Store 262 261 + 263: 6(int) Load 8(invocation) + 264: 134(ptr) AccessChain 75(data) 77 86 78 + 265: 70(int) Load 264 + 266: 70(int) SubgroupFirstInvocationKHR 265 + 267: 134(ptr) AccessChain 75(data) 263 86 78 + Store 267 266 + 268: 6(int) Load 8(invocation) + 269: 142(ptr) AccessChain 75(data) 86 86 + 270: 71(ivec4) Load 269 + 271: 141(ivec2) VectorShuffle 270 270 0 1 + 272: 141(ivec2) SubgroupFirstInvocationKHR 271 + 273: 142(ptr) AccessChain 75(data) 268 86 + 274: 71(ivec4) Load 273 + 275: 71(ivec4) VectorShuffle 274 272 4 5 2 3 + Store 273 275 + 276: 6(int) Load 8(invocation) + 277: 142(ptr) AccessChain 75(data) 102 86 + 278: 71(ivec4) Load 277 + 279: 156(ivec3) VectorShuffle 278 278 0 1 2 + 280: 156(ivec3) SubgroupFirstInvocationKHR 279 + 281: 142(ptr) AccessChain 75(data) 276 86 + 282: 71(ivec4) Load 281 + 283: 71(ivec4) VectorShuffle 282 280 4 5 6 3 + Store 281 283 + 284: 6(int) Load 8(invocation) + 285: 142(ptr) AccessChain 75(data) 119 86 + 286: 71(ivec4) Load 285 + 287: 71(ivec4) SubgroupFirstInvocationKHR 286 + 288: 142(ptr) AccessChain 75(data) 284 86 + Store 288 287 + 289: 6(int) Load 8(invocation) + 290: 186(ptr) AccessChain 75(data) 77 102 78 + 291: 6(int) Load 290 + 292: 6(int) SubgroupFirstInvocationKHR 291 + 293: 186(ptr) AccessChain 75(data) 289 102 78 + Store 293 292 + 294: 6(int) Load 8(invocation) + 295: 193(ptr) AccessChain 75(data) 86 102 + 296: 20(ivec4) Load 295 + 297: 26(ivec2) VectorShuffle 296 296 0 1 + 298: 26(ivec2) SubgroupFirstInvocationKHR 297 + 299: 193(ptr) AccessChain 75(data) 294 102 + 300: 20(ivec4) Load 299 + 301: 20(ivec4) VectorShuffle 300 298 4 5 2 3 + Store 299 301 + 302: 6(int) Load 8(invocation) + 303: 193(ptr) AccessChain 75(data) 102 102 + 304: 20(ivec4) Load 303 + 305: 207(ivec3) VectorShuffle 304 304 0 1 2 + 306: 207(ivec3) SubgroupFirstInvocationKHR 305 + 307: 193(ptr) AccessChain 75(data) 302 102 + 308: 20(ivec4) Load 307 + 309: 20(ivec4) VectorShuffle 308 306 4 5 6 3 + Store 307 309 + 310: 6(int) Load 8(invocation) + 311: 193(ptr) AccessChain 75(data) 119 102 + 312: 20(ivec4) Load 311 + 313: 20(ivec4) SubgroupFirstInvocationKHR 312 + 314: 193(ptr) AccessChain 75(data) 310 102 + Store 314 313 + Branch 67 + 67: Label Return FunctionEnd From 8e96e247fadd3b241fe4a5d081ebe1ad45f885bc Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Tue, 18 Jun 2019 00:37:51 -0600 Subject: [PATCH 15/42] Bump revision. --- 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 92f93055..a22ceb4b 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 3274 +#define GLSLANG_PATCH_LEVEL 3276 From 1f5799c155d30b90871c79d4ca92f8da4d3f3872 Mon Sep 17 00:00:00 2001 From: David 'Digit' Turner Date: Fri, 21 Jun 2019 14:58:30 +0200 Subject: [PATCH 16/42] BUILD.gn: Fix file for use with Fuchsia platform build. In order to upgrade the version of glslang used by the Fuchsia platform source tree, BUILD.gn needs to be slightly modified to care about the case where it is not used with the Chromium //build configuration: - Remove a new compiler warning to ensure proper compilation with -Werror (which is the default). - Add a build target for spirv-remap, which is used by Fuchsia at build time to optimize the precompiled shaders of some of its graphics libraries. --- BUILD.gn | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/BUILD.gn b/BUILD.gn index 860247cb..e38e78a4 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -148,6 +148,7 @@ source_set("glslang_sources") { "-Wno-inconsistent-missing-override", "-Wno-sign-compare", "-Wno-unused-variable", + "-Wno-missing-field-initializers", ] } if (is_win && !is_clang) { @@ -186,3 +187,13 @@ executable("glslang_validator") { ":glslang_sources", ] } + +executable("spirv-remap") { + sources = [ + "StandAlone/spirv-remap.cpp", + ] + defines = [ "ENABLE_OPT=1" ] + deps = [ + ":glslang_sources", + ] +} From 8912336663d81fe196af2ca4f5319032efdb2884 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Fri, 21 Jun 2019 23:27:26 -0500 Subject: [PATCH 17/42] Add test for constant type conversion --- Test/baseResults/spv.constConstruct.vert.out | 158 +++++++++++++++++++ Test/spv.constConstruct.vert | 158 +++++++++++++++++++ gtests/Spv.FromFile.cpp | 1 + 3 files changed, 317 insertions(+) create mode 100644 Test/baseResults/spv.constConstruct.vert.out create mode 100644 Test/spv.constConstruct.vert diff --git a/Test/baseResults/spv.constConstruct.vert.out b/Test/baseResults/spv.constConstruct.vert.out new file mode 100644 index 00000000..12f4c300 --- /dev/null +++ b/Test/baseResults/spv.constConstruct.vert.out @@ -0,0 +1,158 @@ +spv.constConstruct.vert +Validation failed +// Module Version 10000 +// Generated by (magic number): 80007 +// Id's are bound by 137 + + Capability Shader + Capability Float64 + Capability Int64 + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + Source GLSL 450 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float32" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float64" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int16" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int32" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int8" + Name 4 "main" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 16 + 7:6(float16_t) Constant 15360 + 8:6(float16_t) Constant 16384 + 9:6(float16_t) Constant 16896 + 10:6(float16_t) Constant 0 + 11:6(float16_t) Constant 17920 + 12:6(float16_t) Constant 18176 + 13:6(float16_t) Constant 18688 + 14:6(float16_t) Constant 18816 + 15: TypeFloat 32 + 16: 15(float) Constant 1099431936 + 17: 15(float) Constant 1099956224 + 18: 15(float) Constant 1100480512 + 19: 15(float) Constant 2139095040 + 20: 15(float) Constant 0 + 21: 15(float) Constant 1102053376 + 22: 15(float) Constant 1102577664 + 23: 15(float) Constant 1104150528 + 24: 15(float) Constant 1104674816 + 25: 15(float) Constant 1065353216 + 26: TypeFloat 64 + 27:26(float64_t) Constant 0 1077968896 + 28:26(float64_t) Constant 0 1078001664 + 29:26(float64_t) Constant 0 1078034432 + 30:26(float64_t) Constant 36 0 + 31:26(float64_t) Constant 37 0 + 32:26(float64_t) Constant 0 1078132736 + 33:26(float64_t) Constant 0 1078165504 + 34:26(float64_t) Constant 40 0 + 35:26(float64_t) Constant 41 0 + 36:26(float64_t) Constant 0 1078263808 + 37:26(float64_t) Constant 0 1078296576 + 38:26(float64_t) Constant 0 1072693248 + 39: TypeInt 8 1 + 40: 39(int8_t) Constant 0 + 41: 39(int8_t) Constant 52 + 42: 39(int8_t) Constant 53 + 43: 39(int8_t) Constant 54 + 44: 39(int8_t) Constant 55 + 45: 39(int8_t) Constant 56 + 46: 39(int8_t) Constant 57 + 47: 39(int8_t) Constant 58 + 48: 39(int8_t) Constant 59 + 49: 39(int8_t) Constant 1 + 50: TypeInt 16 1 + 51: 50(int16_t) Constant 0 + 52: 50(int16_t) Constant 68 + 53: 50(int16_t) Constant 69 + 54: 50(int16_t) Constant 70 + 55: 50(int16_t) Constant 71 + 56: 50(int16_t) Constant 72 + 57: 50(int16_t) Constant 73 + 58: 50(int16_t) Constant 74 + 59: 50(int16_t) Constant 75 + 60: 50(int16_t) Constant 1 + 61: TypeInt 32 1 + 62: 61(int) Constant 81 + 63: 61(int) Constant 82 + 64: 61(int) Constant 83 + 65: 61(int) Constant 84 + 66: 61(int) Constant 85 + 67: 61(int) Constant 86 + 68: 61(int) Constant 87 + 69: 61(int) Constant 88 + 70: 61(int) Constant 89 + 71: 61(int) Constant 90 + 72: 61(int) Constant 91 + 73: 61(int) Constant 1 + 74: TypeInt 64 1 + 75: 74(int64_t) Constant 97 0 + 76: 74(int64_t) Constant 98 0 + 77: 74(int64_t) Constant 99 0 + 78: 74(int64_t) Constant 100 1702109236 + 79: 74(int64_t) Constant 101 0 + 80: 74(int64_t) Constant 102 0 + 81: 74(int64_t) Constant 103 0 + 82: 74(int64_t) Constant 104 0 + 83: 74(int64_t) Constant 105 0 + 84: 74(int64_t) Constant 106 0 + 85: 74(int64_t) Constant 107 0 + 86: 74(int64_t) Constant 1 0 + 87: TypeInt 8 0 + 88: 87(int8_t) Constant 0 + 89: 87(int8_t) Constant 116 + 90: 87(int8_t) Constant 117 + 91: 87(int8_t) Constant 118 + 92: 87(int8_t) Constant 119 + 93: 87(int8_t) Constant 120 + 94: 87(int8_t) Constant 121 + 95: 87(int8_t) Constant 122 + 96: 87(int8_t) Constant 123 + 97: 87(int8_t) Constant 1 + 98: TypeInt 16 0 + 99: 98(int16_t) Constant 0 + 100: 98(int16_t) Constant 132 + 101: 98(int16_t) Constant 133 + 102: 98(int16_t) Constant 134 + 103: 98(int16_t) Constant 135 + 104: 98(int16_t) Constant 136 + 105: 98(int16_t) Constant 137 + 106: 98(int16_t) Constant 138 + 107: 98(int16_t) Constant 139 + 108: 98(int16_t) Constant 1 + 109: TypeInt 32 0 + 110: 109(int) Constant 145 + 111: 109(int) Constant 146 + 112: 109(int) Constant 147 + 113: 109(int) Constant 148 + 114: 109(int) Constant 149 + 115: 109(int) Constant 150 + 116: 109(int) Constant 151 + 117: 109(int) Constant 152 + 118: 109(int) Constant 153 + 119: 109(int) Constant 154 + 120: 109(int) Constant 155 + 121: 109(int) Constant 1 + 122: TypeInt 64 0 + 123:122(int64_t) Constant 161 0 + 124:122(int64_t) Constant 162 0 + 125:122(int64_t) Constant 163 0 + 126:122(int64_t) Constant 164 0 + 127:122(int64_t) Constant 165 0 + 128:122(int64_t) Constant 166 0 + 129:122(int64_t) Constant 167 0 + 130:122(int64_t) Constant 168 0 + 131:122(int64_t) Constant 169 0 + 132:122(int64_t) Constant 170 0 + 133:122(int64_t) Constant 171 0 + 134:122(int64_t) Constant 1 0 + 135: TypeBool + 136: 135(bool) ConstantTrue + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd diff --git a/Test/spv.constConstruct.vert b/Test/spv.constConstruct.vert new file mode 100644 index 00000000..13d5e361 --- /dev/null +++ b/Test/spv.constConstruct.vert @@ -0,0 +1,158 @@ +#version 450 +#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable +#extension GL_EXT_shader_explicit_arithmetic_types_float32 : enable +#extension GL_EXT_shader_explicit_arithmetic_types_float64 : enable +#extension GL_EXT_shader_explicit_arithmetic_types_int8 : enable +#extension GL_EXT_shader_explicit_arithmetic_types_int16 : enable +#extension GL_EXT_shader_explicit_arithmetic_types_int32 : enable +#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable + +precision highp float; + +void main() +{ + float16_t(float16_t(0x1)); + float16_t(float32_t(0x2)); + float16_t(float64_t(0x3)); + float16_t(int8_t (0x4)); + float16_t(int16_t (0x5)); + float16_t(int32_t (0x6)); + float16_t(int64_t (0x7)); + float16_t(uint8_t (0x8)); + float16_t(uint16_t (0x9)); + float16_t(uint32_t (0xA)); + float16_t(uint64_t (0xB)); + float16_t(bool (0xC)); + float32_t(float16_t(0x11)); + float32_t(float32_t(0x12)); + float32_t(float64_t(0x13)); + float32_t(int8_t (0x14)); + float32_t(int16_t (0x15)); + float32_t(int32_t (0x16)); + float32_t(int64_t (0x17)); + float32_t(uint8_t (0x18)); + float32_t(uint16_t (0x19)); + float32_t(uint32_t (0x1A)); + float32_t(uint64_t (0x1B)); + float32_t(bool (0x1C)); + float64_t(float16_t(0x21)); + float64_t(float32_t(0x22)); + float64_t(float64_t(0x23)); + float64_t(int8_t (0x24)); + float64_t(int16_t (0x25)); + float64_t(int32_t (0x26)); + float64_t(int64_t (0x27)); + float64_t(uint8_t (0x28)); + float64_t(uint16_t (0x29)); + float64_t(uint32_t (0x2A)); + float64_t(uint64_t (0x2B)); + float64_t(bool (0x2C)); + int8_t(float16_t(0x31)); + int8_t(float32_t(0x32)); + int8_t(float64_t(0x33)); + int8_t(int8_t (0x34)); + int8_t(int16_t (0x35)); + int8_t(int32_t (0x36)); + int8_t(int64_t (0x37)); + int8_t(uint8_t (0x38)); + int8_t(uint16_t (0x39)); + int8_t(uint32_t (0x3A)); + int8_t(uint64_t (0x3B)); + int8_t(bool (0x3C)); + int16_t(float16_t(0x41)); + int16_t(float32_t(0x42)); + int16_t(float64_t(0x43)); + int16_t(int8_t (0x44)); + int16_t(int16_t (0x45)); + int16_t(int32_t (0x46)); + int16_t(int64_t (0x47)); + int16_t(uint8_t (0x48)); + int16_t(uint16_t (0x49)); + int16_t(uint32_t (0x4A)); + int16_t(uint64_t (0x4B)); + int16_t(bool (0x4C)); + int32_t(float16_t(0x51)); + int32_t(float32_t(0x52)); + int32_t(float64_t(0x53)); + int32_t(int8_t (0x54)); + int32_t(int16_t (0x55)); + int32_t(int32_t (0x56)); + int32_t(int64_t (0x57)); + int32_t(uint8_t (0x58)); + int32_t(uint16_t (0x59)); + int32_t(uint32_t (0x5A)); + int32_t(uint64_t (0x5B)); + int32_t(bool (0x5C)); + int64_t(float16_t(0x61)); + int64_t(float32_t(0x62)); + int64_t(float64_t(0x63)); + int64_t(int8_t (0x64)); + int64_t(int16_t (0x65)); + int64_t(int32_t (0x66)); + int64_t(int64_t (0x67)); + int64_t(uint8_t (0x68)); + int64_t(uint16_t (0x69)); + int64_t(uint32_t (0x6A)); + int64_t(uint64_t (0x6B)); + int64_t(bool (0x6C)); + uint8_t(float16_t(0x71)); + uint8_t(float32_t(0x72)); + uint8_t(float64_t(0x73)); + uint8_t(int8_t (0x74)); + uint8_t(int16_t (0x75)); + uint8_t(int32_t (0x76)); + uint8_t(int64_t (0x77)); + uint8_t(uint8_t (0x78)); + uint8_t(uint16_t (0x79)); + uint8_t(uint32_t (0x7A)); + uint8_t(uint64_t (0x7B)); + uint8_t(bool (0x7C)); + uint16_t(float16_t(0x81)); + uint16_t(float32_t(0x82)); + uint16_t(float64_t(0x83)); + uint16_t(int8_t (0x84)); + uint16_t(int16_t (0x85)); + uint16_t(int32_t (0x86)); + uint16_t(int64_t (0x87)); + uint16_t(uint8_t (0x88)); + uint16_t(uint16_t (0x89)); + uint16_t(uint32_t (0x8A)); + uint16_t(uint64_t (0x8B)); + uint16_t(bool (0x8C)); + uint32_t(float16_t(0x91)); + uint32_t(float32_t(0x92)); + uint32_t(float64_t(0x93)); + uint32_t(int8_t (0x94)); + uint32_t(int16_t (0x95)); + uint32_t(int32_t (0x96)); + uint32_t(int64_t (0x97)); + uint32_t(uint8_t (0x98)); + uint32_t(uint16_t (0x99)); + uint32_t(uint32_t (0x9A)); + uint32_t(uint64_t (0x9B)); + uint32_t(bool (0x9C)); + uint64_t(float16_t(0xA1)); + uint64_t(float32_t(0xA2)); + uint64_t(float64_t(0xA3)); + uint64_t(int8_t (0xA4)); + uint64_t(int16_t (0xA5)); + uint64_t(int32_t (0xA6)); + uint64_t(int64_t (0xA7)); + uint64_t(uint8_t (0xA8)); + uint64_t(uint16_t (0xA9)); + uint64_t(uint32_t (0xAA)); + uint64_t(uint64_t (0xAB)); + uint64_t(bool (0xAC)); + bool(float16_t(0xB1)); + bool(float32_t(0xB2)); + bool(float64_t(0xB3)); + bool(int8_t (0xB4)); + bool(int16_t (0xB5)); + bool(int32_t (0xB6)); + bool(int64_t (0xB7)); + bool(uint8_t (0xB8)); + bool(uint16_t (0xB9)); + bool(uint32_t (0xBA)); + bool(uint64_t (0xBB)); + bool(bool (0xBC)); +} diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 95f4d980..3addb662 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -296,6 +296,7 @@ INSTANTIATE_TEST_CASE_P( "spv.builtInXFB.vert", "spv.conditionalDiscard.frag", "spv.constStruct.vert", + "spv.constConstruct.vert", "spv.controlFlowAttributes.frag", "spv.conversion.frag", "spv.coopmat.comp", From 4b5c498923041272d9cb1bcea06e1f8ed7bc6f2b Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Fri, 21 Jun 2019 23:39:05 -0500 Subject: [PATCH 18/42] Add a bunch of missing cases to promoteConstantUnion. Use macros to expand all the cases more simply. --- .../constantUnaryConversion.comp.out | 320 +++++++++--------- Test/baseResults/spv.constConstruct.vert.out | 269 ++++++++------- glslang/MachineIndependent/Intermediate.cpp | 245 ++------------ 3 files changed, 335 insertions(+), 499 deletions(-) diff --git a/Test/baseResults/constantUnaryConversion.comp.out b/Test/baseResults/constantUnaryConversion.comp.out index 4117e93f..fcaf6f22 100644 --- a/Test/baseResults/constantUnaryConversion.comp.out +++ b/Test/baseResults/constantUnaryConversion.comp.out @@ -9,17 +9,17 @@ local_size = (1, 1, 1) 0:? 'bool_init' ( const bool) 0:? true (const bool) 0:? 'int8_t_init' ( const int8_t) -0:? -1 (const int) +0:? -1 (const int8_t) 0:? 'int16_t_init' ( const int16_t) -0:? -2 (const int) +0:? -2 (const int16_t) 0:? 'int32_t_init' ( const int) 0:? -3 (const int) 0:? 'int64_t_init' ( const int64_t) 0:? -4 (const int64_t) 0:? 'uint8_t_init' ( const uint8_t) -0:? 1 (const int) +0:? 1 (const uint8_t) 0:? 'uint16_t_init' ( const uint16_t) -0:? 2 (const int) +0:? 2 (const uint16_t) 0:? 'uint32_t_init' ( const uint) 0:? 3 (const uint) 0:? 'uint64_t_init' ( const uint64_t) @@ -33,17 +33,17 @@ local_size = (1, 1, 1) 0:? 'bool_to_bool' ( const bool) 0:? true (const bool) 0:? 'int8_t_to_bool' ( const bool) -0:? -1 (const int) +0:? true (const bool) 0:? 'int16_t_to_bool' ( const bool) -0:? -2 (const int) +0:? true (const bool) 0:? 'int32_t_to_bool' ( const bool) 0:? true (const bool) 0:? 'int64_t_to_bool' ( const bool) 0:? true (const bool) 0:? 'uint8_t_to_bool' ( const bool) -0:? 1 (const int) +0:? true (const bool) 0:? 'uint16_t_to_bool' ( const bool) -0:? 2 (const int) +0:? true (const bool) 0:? 'uint32_t_to_bool' ( const bool) 0:? true (const bool) 0:? 'uint64_t_to_bool' ( const bool) @@ -55,53 +55,53 @@ local_size = (1, 1, 1) 0:? 'float64_t_to_bool' ( const bool) 0:? true (const bool) 0:? 'bool_to_int8_t' ( const int8_t) -0:? true (const bool) +0:? 1 (const int8_t) 0:? 'int8_t_to_int8_t' ( const int8_t) -0:? -1 (const int) +0:? -1 (const int8_t) 0:? 'int16_t_to_int8_t' ( const int8_t) -0:? -2 (const int) +0:? -2 (const int8_t) 0:? 'int32_t_to_int8_t' ( const int8_t) -0:? -3 (const int) +0:? -3 (const int8_t) 0:? 'int64_t_to_int8_t' ( const int8_t) -0:? -4 (const int64_t) +0:? -4 (const int8_t) 0:? 'uint8_t_to_int8_t' ( const int8_t) -0:? 1 (const int) +0:? 1 (const int8_t) 0:? 'uint16_t_to_int8_t' ( const int8_t) -0:? 2 (const int) +0:? 2 (const int8_t) 0:? 'uint32_t_to_int8_t' ( const int8_t) -0:? 3 (const uint) +0:? 3 (const int8_t) 0:? 'uint64_t_to_int8_t' ( const int8_t) -0:? 4 (const uint64_t) +0:? 4 (const int8_t) 0:? 'float16_t_to_int8_t' ( const int8_t) -0:? 42.000000 +0:? 42 (const int8_t) 0:? 'float32_t_to_int8_t' ( const int8_t) -0:? 13.000000 +0:? 13 (const int8_t) 0:? 'float64_t_to_int8_t' ( const int8_t) -0:? -4.000000 +0:? -4 (const int8_t) 0:? 'bool_to_int16_t' ( const int16_t) -0:? true (const bool) +0:? 1 (const int16_t) 0:? 'int8_t_to_int16_t' ( const int16_t) -0:? -1 (const int) +0:? -1 (const int16_t) 0:? 'int16_t_to_int16_t' ( const int16_t) -0:? -2 (const int) +0:? -2 (const int16_t) 0:? 'int32_t_to_int16_t' ( const int16_t) -0:? -3 (const int) +0:? -3 (const int16_t) 0:? 'int64_t_to_int16_t' ( const int16_t) -0:? -4 (const int64_t) +0:? -4 (const int16_t) 0:? 'uint8_t_to_int16_t' ( const int16_t) -0:? 1 (const int) +0:? 1 (const int16_t) 0:? 'uint16_t_to_int16_t' ( const int16_t) -0:? 2 (const int) +0:? 2 (const int16_t) 0:? 'uint32_t_to_int16_t' ( const int16_t) -0:? 3 (const uint) +0:? 3 (const int16_t) 0:? 'uint64_t_to_int16_t' ( const int16_t) -0:? 4 (const uint64_t) +0:? 4 (const int16_t) 0:? 'float16_t_to_int16_t' ( const int16_t) -0:? 42.000000 +0:? 42 (const int16_t) 0:? 'float32_t_to_int16_t' ( const int16_t) -0:? 13.000000 +0:? 13 (const int16_t) 0:? 'float64_t_to_int16_t' ( const int16_t) -0:? -4.000000 +0:? -4 (const int16_t) 0:? 'bool_to_int32_t' ( const int) 0:? 1 (const int) 0:? 'int8_t_to_int32_t' ( const int) @@ -129,17 +129,17 @@ local_size = (1, 1, 1) 0:? 'bool_to_int64_t' ( const int64_t) 0:? 1 (const int64_t) 0:? 'int8_t_to_int64_t' ( const int64_t) -0:? -1 (const int) +0:? -1 (const int64_t) 0:? 'int16_t_to_int64_t' ( const int64_t) -0:? -2 (const int) +0:? -2 (const int64_t) 0:? 'int32_t_to_int64_t' ( const int64_t) 0:? -3 (const int64_t) 0:? 'int64_t_to_int64_t' ( const int64_t) 0:? -4 (const int64_t) 0:? 'uint8_t_to_int64_t' ( const int64_t) -0:? 1 (const int) +0:? 1 (const int64_t) 0:? 'uint16_t_to_int64_t' ( const int64_t) -0:? 2 (const int) +0:? 2 (const int64_t) 0:? 'uint32_t_to_int64_t' ( const int64_t) 0:? 3 (const int64_t) 0:? 'uint64_t_to_int64_t' ( const int64_t) @@ -151,67 +151,67 @@ local_size = (1, 1, 1) 0:? 'float64_t_to_int64_t' ( const int64_t) 0:? -4 (const int64_t) 0:? 'bool_to_uint8_t' ( const uint8_t) -0:? true (const bool) +0:? 1 (const uint8_t) 0:? 'int8_t_to_uint8_t' ( const uint8_t) -0:? -1 (const int) +0:? 255 (const uint8_t) 0:? 'int16_t_to_uint8_t' ( const uint8_t) -0:? -2 (const int) +0:? 254 (const uint8_t) 0:? 'int32_t_to_uint8_t' ( const uint8_t) -0:? -3 (const int) +0:? 253 (const uint8_t) 0:? 'int64_t_to_uint8_t' ( const uint8_t) -0:? -4 (const int64_t) +0:? 252 (const uint8_t) 0:? 'uint8_t_to_uint8_t' ( const uint8_t) -0:? 1 (const int) +0:? 1 (const uint8_t) 0:? 'uint16_t_to_uint8_t' ( const uint8_t) -0:? 2 (const int) +0:? 2 (const uint8_t) 0:? 'uint32_t_to_uint8_t' ( const uint8_t) -0:? 3 (const uint) +0:? 3 (const uint8_t) 0:? 'uint64_t_to_uint8_t' ( const uint8_t) -0:? 4 (const uint64_t) +0:? 4 (const uint8_t) 0:? 'float16_t_to_uint8_t' ( const uint8_t) -0:? 42.000000 +0:? 42 (const uint8_t) 0:? 'float32_t_to_uint8_t' ( const uint8_t) -0:? 13.000000 +0:? 13 (const uint8_t) 0:? 'float64_t_to_uint8_t' ( const uint8_t) -0:? -4.000000 +0:? 252 (const uint8_t) 0:? 'bool_to_uint16_t' ( const uint16_t) -0:? true (const bool) +0:? 1 (const uint16_t) 0:? 'int8_t_to_uint16_t' ( const uint16_t) -0:? -1 (const int) +0:? 65535 (const uint16_t) 0:? 'int16_t_to_uint16_t' ( const uint16_t) -0:? -2 (const int) +0:? 65534 (const uint16_t) 0:? 'int32_t_to_uint16_t' ( const uint16_t) -0:? -3 (const int) +0:? 65533 (const uint16_t) 0:? 'int64_t_to_uint16_t' ( const uint16_t) -0:? -4 (const int64_t) +0:? 65532 (const uint16_t) 0:? 'uint8_t_to_uint16_t' ( const uint16_t) -0:? 1 (const int) +0:? 1 (const uint16_t) 0:? 'uint16_t_to_uint16_t' ( const uint16_t) -0:? 2 (const int) +0:? 2 (const uint16_t) 0:? 'uint32_t_to_uint16_t' ( const uint16_t) -0:? 3 (const uint) +0:? 3 (const uint16_t) 0:? 'uint64_t_to_uint16_t' ( const uint16_t) -0:? 4 (const uint64_t) +0:? 4 (const uint16_t) 0:? 'float16_t_to_uint16_t' ( const uint16_t) -0:? 42.000000 +0:? 42 (const uint16_t) 0:? 'float32_t_to_uint16_t' ( const uint16_t) -0:? 13.000000 +0:? 13 (const uint16_t) 0:? 'float64_t_to_uint16_t' ( const uint16_t) -0:? -4.000000 +0:? 65532 (const uint16_t) 0:? 'bool_to_uint32_t' ( const uint) 0:? 1 (const uint) 0:? 'int8_t_to_uint32_t' ( const uint) -0:? -1 (const int) +0:? 4294967295 (const uint) 0:? 'int16_t_to_uint32_t' ( const uint) -0:? -2 (const int) +0:? 4294967294 (const uint) 0:? 'int32_t_to_uint32_t' ( const uint) 0:? 4294967293 (const uint) 0:? 'int64_t_to_uint32_t' ( const uint) 0:? 4294967292 (const uint) 0:? 'uint8_t_to_uint32_t' ( const uint) -0:? 1 (const int) +0:? 1 (const uint) 0:? 'uint16_t_to_uint32_t' ( const uint) -0:? 2 (const int) +0:? 2 (const uint) 0:? 'uint32_t_to_uint32_t' ( const uint) 0:? 3 (const uint) 0:? 'uint64_t_to_uint32_t' ( const uint) @@ -225,17 +225,17 @@ local_size = (1, 1, 1) 0:? 'bool_to_uint64_t' ( const uint64_t) 0:? 1 (const uint64_t) 0:? 'int8_t_to_uint64_t' ( const uint64_t) -0:? -1 (const int) +0:? 18446744073709551615 (const uint64_t) 0:? 'int16_t_to_uint64_t' ( const uint64_t) -0:? -2 (const int) +0:? 18446744073709551614 (const uint64_t) 0:? 'int32_t_to_uint64_t' ( const uint64_t) 0:? 18446744073709551613 (const uint64_t) 0:? 'int64_t_to_uint64_t' ( const uint64_t) 0:? 18446744073709551612 (const uint64_t) 0:? 'uint8_t_to_uint64_t' ( const uint64_t) -0:? 1 (const int) +0:? 1 (const uint64_t) 0:? 'uint16_t_to_uint64_t' ( const uint64_t) -0:? 2 (const int) +0:? 2 (const uint64_t) 0:? 'uint32_t_to_uint64_t' ( const uint64_t) 0:? 3 (const uint64_t) 0:? 'uint64_t_to_uint64_t' ( const uint64_t) @@ -249,17 +249,17 @@ local_size = (1, 1, 1) 0:? 'bool_to_float16_t' ( const float16_t) 0:? 1.000000 0:? 'int8_t_to_float16_t' ( const float16_t) -0:? -1 (const int) +0:? -1.000000 0:? 'int16_t_to_float16_t' ( const float16_t) -0:? -2 (const int) +0:? -2.000000 0:? 'int32_t_to_float16_t' ( const float16_t) 0:? -3.000000 0:? 'int64_t_to_float16_t' ( const float16_t) 0:? -4.000000 0:? 'uint8_t_to_float16_t' ( const float16_t) -0:? 1 (const int) +0:? 1.000000 0:? 'uint16_t_to_float16_t' ( const float16_t) -0:? 2 (const int) +0:? 2.000000 0:? 'uint32_t_to_float16_t' ( const float16_t) 0:? 3.000000 0:? 'uint64_t_to_float16_t' ( const float16_t) @@ -273,17 +273,17 @@ local_size = (1, 1, 1) 0:? 'bool_to_float32_t' ( const float) 0:? 1.000000 0:? 'int8_t_to_float32_t' ( const float) -0:? -1 (const int) +0:? -1.000000 0:? 'int16_t_to_float32_t' ( const float) -0:? -2 (const int) +0:? -2.000000 0:? 'int32_t_to_float32_t' ( const float) 0:? -3.000000 0:? 'int64_t_to_float32_t' ( const float) 0:? -4.000000 0:? 'uint8_t_to_float32_t' ( const float) -0:? 1 (const int) +0:? 1.000000 0:? 'uint16_t_to_float32_t' ( const float) -0:? 2 (const int) +0:? 2.000000 0:? 'uint32_t_to_float32_t' ( const float) 0:? 3.000000 0:? 'uint64_t_to_float32_t' ( const float) @@ -297,17 +297,17 @@ local_size = (1, 1, 1) 0:? 'bool_to_float64_t' ( const double) 0:? 1.000000 0:? 'int8_t_to_float64_t' ( const double) -0:? -1 (const int) +0:? -1.000000 0:? 'int16_t_to_float64_t' ( const double) -0:? -2 (const int) +0:? -2.000000 0:? 'int32_t_to_float64_t' ( const double) 0:? -3.000000 0:? 'int64_t_to_float64_t' ( const double) 0:? -4.000000 0:? 'uint8_t_to_float64_t' ( const double) -0:? 1 (const int) +0:? 1.000000 0:? 'uint16_t_to_float64_t' ( const double) -0:? 2 (const int) +0:? 2.000000 0:? 'uint32_t_to_float64_t' ( const double) 0:? 3.000000 0:? 'uint64_t_to_float64_t' ( const double) @@ -333,17 +333,17 @@ local_size = (1, 1, 1) 0:? 'bool_init' ( const bool) 0:? true (const bool) 0:? 'int8_t_init' ( const int8_t) -0:? -1 (const int) +0:? -1 (const int8_t) 0:? 'int16_t_init' ( const int16_t) -0:? -2 (const int) +0:? -2 (const int16_t) 0:? 'int32_t_init' ( const int) 0:? -3 (const int) 0:? 'int64_t_init' ( const int64_t) 0:? -4 (const int64_t) 0:? 'uint8_t_init' ( const uint8_t) -0:? 1 (const int) +0:? 1 (const uint8_t) 0:? 'uint16_t_init' ( const uint16_t) -0:? 2 (const int) +0:? 2 (const uint16_t) 0:? 'uint32_t_init' ( const uint) 0:? 3 (const uint) 0:? 'uint64_t_init' ( const uint64_t) @@ -357,17 +357,17 @@ local_size = (1, 1, 1) 0:? 'bool_to_bool' ( const bool) 0:? true (const bool) 0:? 'int8_t_to_bool' ( const bool) -0:? -1 (const int) +0:? true (const bool) 0:? 'int16_t_to_bool' ( const bool) -0:? -2 (const int) +0:? true (const bool) 0:? 'int32_t_to_bool' ( const bool) 0:? true (const bool) 0:? 'int64_t_to_bool' ( const bool) 0:? true (const bool) 0:? 'uint8_t_to_bool' ( const bool) -0:? 1 (const int) +0:? true (const bool) 0:? 'uint16_t_to_bool' ( const bool) -0:? 2 (const int) +0:? true (const bool) 0:? 'uint32_t_to_bool' ( const bool) 0:? true (const bool) 0:? 'uint64_t_to_bool' ( const bool) @@ -379,53 +379,53 @@ local_size = (1, 1, 1) 0:? 'float64_t_to_bool' ( const bool) 0:? true (const bool) 0:? 'bool_to_int8_t' ( const int8_t) -0:? true (const bool) +0:? 1 (const int8_t) 0:? 'int8_t_to_int8_t' ( const int8_t) -0:? -1 (const int) +0:? -1 (const int8_t) 0:? 'int16_t_to_int8_t' ( const int8_t) -0:? -2 (const int) +0:? -2 (const int8_t) 0:? 'int32_t_to_int8_t' ( const int8_t) -0:? -3 (const int) +0:? -3 (const int8_t) 0:? 'int64_t_to_int8_t' ( const int8_t) -0:? -4 (const int64_t) +0:? -4 (const int8_t) 0:? 'uint8_t_to_int8_t' ( const int8_t) -0:? 1 (const int) +0:? 1 (const int8_t) 0:? 'uint16_t_to_int8_t' ( const int8_t) -0:? 2 (const int) +0:? 2 (const int8_t) 0:? 'uint32_t_to_int8_t' ( const int8_t) -0:? 3 (const uint) +0:? 3 (const int8_t) 0:? 'uint64_t_to_int8_t' ( const int8_t) -0:? 4 (const uint64_t) +0:? 4 (const int8_t) 0:? 'float16_t_to_int8_t' ( const int8_t) -0:? 42.000000 +0:? 42 (const int8_t) 0:? 'float32_t_to_int8_t' ( const int8_t) -0:? 13.000000 +0:? 13 (const int8_t) 0:? 'float64_t_to_int8_t' ( const int8_t) -0:? -4.000000 +0:? -4 (const int8_t) 0:? 'bool_to_int16_t' ( const int16_t) -0:? true (const bool) +0:? 1 (const int16_t) 0:? 'int8_t_to_int16_t' ( const int16_t) -0:? -1 (const int) +0:? -1 (const int16_t) 0:? 'int16_t_to_int16_t' ( const int16_t) -0:? -2 (const int) +0:? -2 (const int16_t) 0:? 'int32_t_to_int16_t' ( const int16_t) -0:? -3 (const int) +0:? -3 (const int16_t) 0:? 'int64_t_to_int16_t' ( const int16_t) -0:? -4 (const int64_t) +0:? -4 (const int16_t) 0:? 'uint8_t_to_int16_t' ( const int16_t) -0:? 1 (const int) +0:? 1 (const int16_t) 0:? 'uint16_t_to_int16_t' ( const int16_t) -0:? 2 (const int) +0:? 2 (const int16_t) 0:? 'uint32_t_to_int16_t' ( const int16_t) -0:? 3 (const uint) +0:? 3 (const int16_t) 0:? 'uint64_t_to_int16_t' ( const int16_t) -0:? 4 (const uint64_t) +0:? 4 (const int16_t) 0:? 'float16_t_to_int16_t' ( const int16_t) -0:? 42.000000 +0:? 42 (const int16_t) 0:? 'float32_t_to_int16_t' ( const int16_t) -0:? 13.000000 +0:? 13 (const int16_t) 0:? 'float64_t_to_int16_t' ( const int16_t) -0:? -4.000000 +0:? -4 (const int16_t) 0:? 'bool_to_int32_t' ( const int) 0:? 1 (const int) 0:? 'int8_t_to_int32_t' ( const int) @@ -453,17 +453,17 @@ local_size = (1, 1, 1) 0:? 'bool_to_int64_t' ( const int64_t) 0:? 1 (const int64_t) 0:? 'int8_t_to_int64_t' ( const int64_t) -0:? -1 (const int) +0:? -1 (const int64_t) 0:? 'int16_t_to_int64_t' ( const int64_t) -0:? -2 (const int) +0:? -2 (const int64_t) 0:? 'int32_t_to_int64_t' ( const int64_t) 0:? -3 (const int64_t) 0:? 'int64_t_to_int64_t' ( const int64_t) 0:? -4 (const int64_t) 0:? 'uint8_t_to_int64_t' ( const int64_t) -0:? 1 (const int) +0:? 1 (const int64_t) 0:? 'uint16_t_to_int64_t' ( const int64_t) -0:? 2 (const int) +0:? 2 (const int64_t) 0:? 'uint32_t_to_int64_t' ( const int64_t) 0:? 3 (const int64_t) 0:? 'uint64_t_to_int64_t' ( const int64_t) @@ -475,67 +475,67 @@ local_size = (1, 1, 1) 0:? 'float64_t_to_int64_t' ( const int64_t) 0:? -4 (const int64_t) 0:? 'bool_to_uint8_t' ( const uint8_t) -0:? true (const bool) +0:? 1 (const uint8_t) 0:? 'int8_t_to_uint8_t' ( const uint8_t) -0:? -1 (const int) +0:? 255 (const uint8_t) 0:? 'int16_t_to_uint8_t' ( const uint8_t) -0:? -2 (const int) +0:? 254 (const uint8_t) 0:? 'int32_t_to_uint8_t' ( const uint8_t) -0:? -3 (const int) +0:? 253 (const uint8_t) 0:? 'int64_t_to_uint8_t' ( const uint8_t) -0:? -4 (const int64_t) +0:? 252 (const uint8_t) 0:? 'uint8_t_to_uint8_t' ( const uint8_t) -0:? 1 (const int) +0:? 1 (const uint8_t) 0:? 'uint16_t_to_uint8_t' ( const uint8_t) -0:? 2 (const int) +0:? 2 (const uint8_t) 0:? 'uint32_t_to_uint8_t' ( const uint8_t) -0:? 3 (const uint) +0:? 3 (const uint8_t) 0:? 'uint64_t_to_uint8_t' ( const uint8_t) -0:? 4 (const uint64_t) +0:? 4 (const uint8_t) 0:? 'float16_t_to_uint8_t' ( const uint8_t) -0:? 42.000000 +0:? 42 (const uint8_t) 0:? 'float32_t_to_uint8_t' ( const uint8_t) -0:? 13.000000 +0:? 13 (const uint8_t) 0:? 'float64_t_to_uint8_t' ( const uint8_t) -0:? -4.000000 +0:? 252 (const uint8_t) 0:? 'bool_to_uint16_t' ( const uint16_t) -0:? true (const bool) +0:? 1 (const uint16_t) 0:? 'int8_t_to_uint16_t' ( const uint16_t) -0:? -1 (const int) +0:? 65535 (const uint16_t) 0:? 'int16_t_to_uint16_t' ( const uint16_t) -0:? -2 (const int) +0:? 65534 (const uint16_t) 0:? 'int32_t_to_uint16_t' ( const uint16_t) -0:? -3 (const int) +0:? 65533 (const uint16_t) 0:? 'int64_t_to_uint16_t' ( const uint16_t) -0:? -4 (const int64_t) +0:? 65532 (const uint16_t) 0:? 'uint8_t_to_uint16_t' ( const uint16_t) -0:? 1 (const int) +0:? 1 (const uint16_t) 0:? 'uint16_t_to_uint16_t' ( const uint16_t) -0:? 2 (const int) +0:? 2 (const uint16_t) 0:? 'uint32_t_to_uint16_t' ( const uint16_t) -0:? 3 (const uint) +0:? 3 (const uint16_t) 0:? 'uint64_t_to_uint16_t' ( const uint16_t) -0:? 4 (const uint64_t) +0:? 4 (const uint16_t) 0:? 'float16_t_to_uint16_t' ( const uint16_t) -0:? 42.000000 +0:? 42 (const uint16_t) 0:? 'float32_t_to_uint16_t' ( const uint16_t) -0:? 13.000000 +0:? 13 (const uint16_t) 0:? 'float64_t_to_uint16_t' ( const uint16_t) -0:? -4.000000 +0:? 65532 (const uint16_t) 0:? 'bool_to_uint32_t' ( const uint) 0:? 1 (const uint) 0:? 'int8_t_to_uint32_t' ( const uint) -0:? -1 (const int) +0:? 4294967295 (const uint) 0:? 'int16_t_to_uint32_t' ( const uint) -0:? -2 (const int) +0:? 4294967294 (const uint) 0:? 'int32_t_to_uint32_t' ( const uint) 0:? 4294967293 (const uint) 0:? 'int64_t_to_uint32_t' ( const uint) 0:? 4294967292 (const uint) 0:? 'uint8_t_to_uint32_t' ( const uint) -0:? 1 (const int) +0:? 1 (const uint) 0:? 'uint16_t_to_uint32_t' ( const uint) -0:? 2 (const int) +0:? 2 (const uint) 0:? 'uint32_t_to_uint32_t' ( const uint) 0:? 3 (const uint) 0:? 'uint64_t_to_uint32_t' ( const uint) @@ -549,17 +549,17 @@ local_size = (1, 1, 1) 0:? 'bool_to_uint64_t' ( const uint64_t) 0:? 1 (const uint64_t) 0:? 'int8_t_to_uint64_t' ( const uint64_t) -0:? -1 (const int) +0:? 18446744073709551615 (const uint64_t) 0:? 'int16_t_to_uint64_t' ( const uint64_t) -0:? -2 (const int) +0:? 18446744073709551614 (const uint64_t) 0:? 'int32_t_to_uint64_t' ( const uint64_t) 0:? 18446744073709551613 (const uint64_t) 0:? 'int64_t_to_uint64_t' ( const uint64_t) 0:? 18446744073709551612 (const uint64_t) 0:? 'uint8_t_to_uint64_t' ( const uint64_t) -0:? 1 (const int) +0:? 1 (const uint64_t) 0:? 'uint16_t_to_uint64_t' ( const uint64_t) -0:? 2 (const int) +0:? 2 (const uint64_t) 0:? 'uint32_t_to_uint64_t' ( const uint64_t) 0:? 3 (const uint64_t) 0:? 'uint64_t_to_uint64_t' ( const uint64_t) @@ -573,17 +573,17 @@ local_size = (1, 1, 1) 0:? 'bool_to_float16_t' ( const float16_t) 0:? 1.000000 0:? 'int8_t_to_float16_t' ( const float16_t) -0:? -1 (const int) +0:? -1.000000 0:? 'int16_t_to_float16_t' ( const float16_t) -0:? -2 (const int) +0:? -2.000000 0:? 'int32_t_to_float16_t' ( const float16_t) 0:? -3.000000 0:? 'int64_t_to_float16_t' ( const float16_t) 0:? -4.000000 0:? 'uint8_t_to_float16_t' ( const float16_t) -0:? 1 (const int) +0:? 1.000000 0:? 'uint16_t_to_float16_t' ( const float16_t) -0:? 2 (const int) +0:? 2.000000 0:? 'uint32_t_to_float16_t' ( const float16_t) 0:? 3.000000 0:? 'uint64_t_to_float16_t' ( const float16_t) @@ -597,17 +597,17 @@ local_size = (1, 1, 1) 0:? 'bool_to_float32_t' ( const float) 0:? 1.000000 0:? 'int8_t_to_float32_t' ( const float) -0:? -1 (const int) +0:? -1.000000 0:? 'int16_t_to_float32_t' ( const float) -0:? -2 (const int) +0:? -2.000000 0:? 'int32_t_to_float32_t' ( const float) 0:? -3.000000 0:? 'int64_t_to_float32_t' ( const float) 0:? -4.000000 0:? 'uint8_t_to_float32_t' ( const float) -0:? 1 (const int) +0:? 1.000000 0:? 'uint16_t_to_float32_t' ( const float) -0:? 2 (const int) +0:? 2.000000 0:? 'uint32_t_to_float32_t' ( const float) 0:? 3.000000 0:? 'uint64_t_to_float32_t' ( const float) @@ -621,17 +621,17 @@ local_size = (1, 1, 1) 0:? 'bool_to_float64_t' ( const double) 0:? 1.000000 0:? 'int8_t_to_float64_t' ( const double) -0:? -1 (const int) +0:? -1.000000 0:? 'int16_t_to_float64_t' ( const double) -0:? -2 (const int) +0:? -2.000000 0:? 'int32_t_to_float64_t' ( const double) 0:? -3.000000 0:? 'int64_t_to_float64_t' ( const double) 0:? -4.000000 0:? 'uint8_t_to_float64_t' ( const double) -0:? 1 (const int) +0:? 1.000000 0:? 'uint16_t_to_float64_t' ( const double) -0:? 2 (const int) +0:? 2.000000 0:? 'uint32_t_to_float64_t' ( const double) 0:? 3.000000 0:? 'uint64_t_to_float64_t' ( const double) diff --git a/Test/baseResults/spv.constConstruct.vert.out b/Test/baseResults/spv.constConstruct.vert.out index 12f4c300..5922b34a 100644 --- a/Test/baseResults/spv.constConstruct.vert.out +++ b/Test/baseResults/spv.constConstruct.vert.out @@ -2,7 +2,7 @@ spv.constConstruct.vert Validation failed // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 137 +// Id's are bound by 150 Capability Shader Capability Float64 @@ -25,133 +25,146 @@ Validation failed 7:6(float16_t) Constant 15360 8:6(float16_t) Constant 16384 9:6(float16_t) Constant 16896 - 10:6(float16_t) Constant 0 - 11:6(float16_t) Constant 17920 - 12:6(float16_t) Constant 18176 - 13:6(float16_t) Constant 18688 - 14:6(float16_t) Constant 18816 - 15: TypeFloat 32 - 16: 15(float) Constant 1099431936 - 17: 15(float) Constant 1099956224 - 18: 15(float) Constant 1100480512 - 19: 15(float) Constant 2139095040 - 20: 15(float) Constant 0 - 21: 15(float) Constant 1102053376 - 22: 15(float) Constant 1102577664 - 23: 15(float) Constant 1104150528 - 24: 15(float) Constant 1104674816 - 25: 15(float) Constant 1065353216 - 26: TypeFloat 64 - 27:26(float64_t) Constant 0 1077968896 - 28:26(float64_t) Constant 0 1078001664 - 29:26(float64_t) Constant 0 1078034432 - 30:26(float64_t) Constant 36 0 - 31:26(float64_t) Constant 37 0 - 32:26(float64_t) Constant 0 1078132736 - 33:26(float64_t) Constant 0 1078165504 - 34:26(float64_t) Constant 40 0 - 35:26(float64_t) Constant 41 0 - 36:26(float64_t) Constant 0 1078263808 - 37:26(float64_t) Constant 0 1078296576 - 38:26(float64_t) Constant 0 1072693248 - 39: TypeInt 8 1 - 40: 39(int8_t) Constant 0 - 41: 39(int8_t) Constant 52 - 42: 39(int8_t) Constant 53 - 43: 39(int8_t) Constant 54 - 44: 39(int8_t) Constant 55 - 45: 39(int8_t) Constant 56 - 46: 39(int8_t) Constant 57 - 47: 39(int8_t) Constant 58 - 48: 39(int8_t) Constant 59 - 49: 39(int8_t) Constant 1 - 50: TypeInt 16 1 - 51: 50(int16_t) Constant 0 - 52: 50(int16_t) Constant 68 - 53: 50(int16_t) Constant 69 - 54: 50(int16_t) Constant 70 - 55: 50(int16_t) Constant 71 - 56: 50(int16_t) Constant 72 - 57: 50(int16_t) Constant 73 - 58: 50(int16_t) Constant 74 - 59: 50(int16_t) Constant 75 - 60: 50(int16_t) Constant 1 - 61: TypeInt 32 1 - 62: 61(int) Constant 81 - 63: 61(int) Constant 82 - 64: 61(int) Constant 83 - 65: 61(int) Constant 84 - 66: 61(int) Constant 85 - 67: 61(int) Constant 86 - 68: 61(int) Constant 87 - 69: 61(int) Constant 88 - 70: 61(int) Constant 89 - 71: 61(int) Constant 90 - 72: 61(int) Constant 91 - 73: 61(int) Constant 1 - 74: TypeInt 64 1 - 75: 74(int64_t) Constant 97 0 - 76: 74(int64_t) Constant 98 0 - 77: 74(int64_t) Constant 99 0 - 78: 74(int64_t) Constant 100 1702109236 - 79: 74(int64_t) Constant 101 0 - 80: 74(int64_t) Constant 102 0 - 81: 74(int64_t) Constant 103 0 - 82: 74(int64_t) Constant 104 0 - 83: 74(int64_t) Constant 105 0 - 84: 74(int64_t) Constant 106 0 - 85: 74(int64_t) Constant 107 0 - 86: 74(int64_t) Constant 1 0 - 87: TypeInt 8 0 - 88: 87(int8_t) Constant 0 - 89: 87(int8_t) Constant 116 - 90: 87(int8_t) Constant 117 - 91: 87(int8_t) Constant 118 - 92: 87(int8_t) Constant 119 - 93: 87(int8_t) Constant 120 - 94: 87(int8_t) Constant 121 - 95: 87(int8_t) Constant 122 - 96: 87(int8_t) Constant 123 - 97: 87(int8_t) Constant 1 - 98: TypeInt 16 0 - 99: 98(int16_t) Constant 0 - 100: 98(int16_t) Constant 132 - 101: 98(int16_t) Constant 133 - 102: 98(int16_t) Constant 134 - 103: 98(int16_t) Constant 135 - 104: 98(int16_t) Constant 136 - 105: 98(int16_t) Constant 137 - 106: 98(int16_t) Constant 138 - 107: 98(int16_t) Constant 139 - 108: 98(int16_t) Constant 1 - 109: TypeInt 32 0 - 110: 109(int) Constant 145 - 111: 109(int) Constant 146 - 112: 109(int) Constant 147 - 113: 109(int) Constant 148 - 114: 109(int) Constant 149 - 115: 109(int) Constant 150 - 116: 109(int) Constant 151 - 117: 109(int) Constant 152 - 118: 109(int) Constant 153 - 119: 109(int) Constant 154 - 120: 109(int) Constant 155 - 121: 109(int) Constant 1 - 122: TypeInt 64 0 - 123:122(int64_t) Constant 161 0 - 124:122(int64_t) Constant 162 0 - 125:122(int64_t) Constant 163 0 - 126:122(int64_t) Constant 164 0 - 127:122(int64_t) Constant 165 0 - 128:122(int64_t) Constant 166 0 - 129:122(int64_t) Constant 167 0 - 130:122(int64_t) Constant 168 0 - 131:122(int64_t) Constant 169 0 - 132:122(int64_t) Constant 170 0 - 133:122(int64_t) Constant 171 0 - 134:122(int64_t) Constant 1 0 - 135: TypeBool - 136: 135(bool) ConstantTrue + 10:6(float16_t) Constant 17408 + 11:6(float16_t) Constant 17664 + 12:6(float16_t) Constant 17920 + 13:6(float16_t) Constant 18176 + 14:6(float16_t) Constant 18432 + 15:6(float16_t) Constant 18560 + 16:6(float16_t) Constant 18688 + 17:6(float16_t) Constant 18816 + 18: TypeFloat 32 + 19: 18(float) Constant 1099431936 + 20: 18(float) Constant 1099956224 + 21: 18(float) Constant 1100480512 + 22: 18(float) Constant 1101004800 + 23: 18(float) Constant 1101529088 + 24: 18(float) Constant 1102053376 + 25: 18(float) Constant 1102577664 + 26: 18(float) Constant 1103101952 + 27: 18(float) Constant 1103626240 + 28: 18(float) Constant 1104150528 + 29: 18(float) Constant 1104674816 + 30: 18(float) Constant 1065353216 + 31: TypeFloat 64 + 32:31(float64_t) Constant 0 1077968896 + 33:31(float64_t) Constant 0 1078001664 + 34:31(float64_t) Constant 0 1078034432 + 35:31(float64_t) Constant 0 1078067200 + 36:31(float64_t) Constant 0 1078099968 + 37:31(float64_t) Constant 0 1078132736 + 38:31(float64_t) Constant 0 1078165504 + 39:31(float64_t) Constant 0 1078198272 + 40:31(float64_t) Constant 0 1078231040 + 41:31(float64_t) Constant 0 1078263808 + 42:31(float64_t) Constant 0 1078296576 + 43:31(float64_t) Constant 0 1072693248 + 44: TypeInt 8 1 + 45: 44(int8_t) Constant 49 + 46: 44(int8_t) Constant 50 + 47: 44(int8_t) Constant 51 + 48: 44(int8_t) Constant 52 + 49: 44(int8_t) Constant 53 + 50: 44(int8_t) Constant 54 + 51: 44(int8_t) Constant 55 + 52: 44(int8_t) Constant 56 + 53: 44(int8_t) Constant 57 + 54: 44(int8_t) Constant 58 + 55: 44(int8_t) Constant 59 + 56: 44(int8_t) Constant 1 + 57: TypeInt 16 1 + 58: 57(int16_t) Constant 65 + 59: 57(int16_t) Constant 66 + 60: 57(int16_t) Constant 67 + 61: 57(int16_t) Constant 68 + 62: 57(int16_t) Constant 69 + 63: 57(int16_t) Constant 70 + 64: 57(int16_t) Constant 71 + 65: 57(int16_t) Constant 72 + 66: 57(int16_t) Constant 73 + 67: 57(int16_t) Constant 74 + 68: 57(int16_t) Constant 75 + 69: 57(int16_t) Constant 1 + 70: TypeInt 32 1 + 71: 70(int) Constant 81 + 72: 70(int) Constant 82 + 73: 70(int) Constant 83 + 74: 70(int) Constant 84 + 75: 70(int) Constant 85 + 76: 70(int) Constant 86 + 77: 70(int) Constant 87 + 78: 70(int) Constant 88 + 79: 70(int) Constant 89 + 80: 70(int) Constant 90 + 81: 70(int) Constant 91 + 82: 70(int) Constant 1 + 83: TypeInt 64 1 + 84: 83(int64_t) Constant 97 0 + 85: 83(int64_t) Constant 98 0 + 86: 83(int64_t) Constant 99 0 + 87: 83(int64_t) Constant 100 0 + 88: 83(int64_t) Constant 101 0 + 89: 83(int64_t) Constant 102 0 + 90: 83(int64_t) Constant 103 0 + 91: 83(int64_t) Constant 104 0 + 92: 83(int64_t) Constant 105 0 + 93: 83(int64_t) Constant 106 0 + 94: 83(int64_t) Constant 107 0 + 95: 83(int64_t) Constant 1 0 + 96: TypeInt 8 0 + 97: 96(int8_t) Constant 113 + 98: 96(int8_t) Constant 114 + 99: 96(int8_t) Constant 115 + 100: 96(int8_t) Constant 116 + 101: 96(int8_t) Constant 117 + 102: 96(int8_t) Constant 118 + 103: 96(int8_t) Constant 119 + 104: 96(int8_t) Constant 120 + 105: 96(int8_t) Constant 121 + 106: 96(int8_t) Constant 122 + 107: 96(int8_t) Constant 123 + 108: 96(int8_t) Constant 1 + 109: TypeInt 16 0 + 110:109(int16_t) Constant 129 + 111:109(int16_t) Constant 130 + 112:109(int16_t) Constant 131 + 113:109(int16_t) Constant 65412 + 114:109(int16_t) Constant 133 + 115:109(int16_t) Constant 134 + 116:109(int16_t) Constant 135 + 117:109(int16_t) Constant 136 + 118:109(int16_t) Constant 137 + 119:109(int16_t) Constant 138 + 120:109(int16_t) Constant 139 + 121:109(int16_t) Constant 1 + 122: TypeInt 32 0 + 123: 122(int) Constant 145 + 124: 122(int) Constant 146 + 125: 122(int) Constant 147 + 126: 122(int) Constant 4294967188 + 127: 122(int) Constant 149 + 128: 122(int) Constant 150 + 129: 122(int) Constant 151 + 130: 122(int) Constant 152 + 131: 122(int) Constant 153 + 132: 122(int) Constant 154 + 133: 122(int) Constant 155 + 134: 122(int) Constant 1 + 135: TypeInt 64 0 + 136:135(int64_t) Constant 161 0 + 137:135(int64_t) Constant 162 0 + 138:135(int64_t) Constant 163 0 + 139:135(int64_t) Constant 4294967204 4294967295 + 140:135(int64_t) Constant 165 0 + 141:135(int64_t) Constant 166 0 + 142:135(int64_t) Constant 167 0 + 143:135(int64_t) Constant 168 0 + 144:135(int64_t) Constant 169 0 + 145:135(int64_t) Constant 170 0 + 146:135(int64_t) Constant 171 0 + 147:135(int64_t) Constant 1 0 + 148: TypeBool + 149: 148(bool) ConstantTrue 4(main): 2 Function None 3 5: Label Return diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 584d8805..640e738a 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -3788,217 +3788,40 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC TConstUnionArray leftUnionArray(size); for (int i=0; i < size; i++) { - switch (promoteTo) { - case EbtFloat: - switch (node->getType().getBasicType()) { - case EbtInt: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getIConst())); - break; - case EbtUint: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getUConst())); - break; - case EbtInt64: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getI64Const())); - break; - case EbtUint64: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getU64Const())); - break; - case EbtBool: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getBConst())); - break; - case EbtFloat: - case EbtDouble: - case EbtFloat16: - leftUnionArray[i] = rightUnionArray[i]; - break; - default: - return node; - } - break; - case EbtDouble: - switch (node->getType().getBasicType()) { - case EbtInt: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getIConst())); - break; - case EbtUint: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getUConst())); - break; - case EbtInt64: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getI64Const())); - break; - case EbtUint64: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getU64Const())); - break; - case EbtBool: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getBConst())); - break; - case EbtFloat: - case EbtDouble: - case EbtFloat16: - leftUnionArray[i] = rightUnionArray[i]; - break; - default: - return node; - } - break; - case EbtFloat16: - switch (node->getType().getBasicType()) { - case EbtInt: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getIConst())); - break; - case EbtUint: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getUConst())); - break; - case EbtInt64: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getI64Const())); - break; - case EbtUint64: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getU64Const())); - break; - case EbtBool: - leftUnionArray[i].setDConst(static_cast(rightUnionArray[i].getBConst())); - break; - case EbtFloat: - case EbtDouble: - case EbtFloat16: - leftUnionArray[i] = rightUnionArray[i]; - break; - default: - return node; - } - break; - case EbtInt: - switch (node->getType().getBasicType()) { - case EbtInt: - leftUnionArray[i] = rightUnionArray[i]; - break; - case EbtUint: - leftUnionArray[i].setIConst(static_cast(rightUnionArray[i].getUConst())); - break; - case EbtInt64: - leftUnionArray[i].setIConst(static_cast(rightUnionArray[i].getI64Const())); - break; - case EbtUint64: - leftUnionArray[i].setIConst(static_cast(rightUnionArray[i].getU64Const())); - break; - case EbtBool: - leftUnionArray[i].setIConst(static_cast(rightUnionArray[i].getBConst())); - break; - case EbtFloat: - case EbtDouble: - case EbtFloat16: - leftUnionArray[i].setIConst(static_cast(rightUnionArray[i].getDConst())); - break; - default: - return node; - } - break; - case EbtUint: - switch (node->getType().getBasicType()) { - case EbtInt: - leftUnionArray[i].setUConst(static_cast(rightUnionArray[i].getIConst())); - break; - case EbtUint: - leftUnionArray[i] = rightUnionArray[i]; - break; - case EbtInt64: - leftUnionArray[i].setUConst(static_cast(rightUnionArray[i].getI64Const())); - break; - case EbtUint64: - leftUnionArray[i].setUConst(static_cast(rightUnionArray[i].getU64Const())); - break; - case EbtBool: - leftUnionArray[i].setUConst(static_cast(rightUnionArray[i].getBConst())); - break; - case EbtFloat: - case EbtDouble: - case EbtFloat16: - leftUnionArray[i].setUConst(static_cast(rightUnionArray[i].getDConst())); - break; - default: - return node; - } - break; - case EbtBool: - switch (node->getType().getBasicType()) { - case EbtInt: - leftUnionArray[i].setBConst(rightUnionArray[i].getIConst() != 0); - break; - case EbtUint: - leftUnionArray[i].setBConst(rightUnionArray[i].getUConst() != 0); - break; - case EbtInt64: - leftUnionArray[i].setBConst(rightUnionArray[i].getI64Const() != 0); - break; - case EbtUint64: - leftUnionArray[i].setBConst(rightUnionArray[i].getU64Const() != 0); - break; - case EbtBool: - leftUnionArray[i] = rightUnionArray[i]; - break; - case EbtFloat: - case EbtDouble: - case EbtFloat16: - leftUnionArray[i].setBConst(rightUnionArray[i].getDConst() != 0.0); - break; - default: - return node; - } - break; - case EbtInt64: - switch (node->getType().getBasicType()) { - case EbtInt: - leftUnionArray[i].setI64Const(static_cast(rightUnionArray[i].getIConst())); - break; - case EbtUint: - leftUnionArray[i].setI64Const(static_cast(rightUnionArray[i].getUConst())); - break; - case EbtInt64: - leftUnionArray[i] = rightUnionArray[i]; - break; - case EbtUint64: - leftUnionArray[i].setI64Const(static_cast(rightUnionArray[i].getU64Const())); - break; - case EbtBool: - leftUnionArray[i].setI64Const(static_cast(rightUnionArray[i].getBConst())); - break; - case EbtFloat: - case EbtDouble: - case EbtFloat16: - leftUnionArray[i].setI64Const(static_cast(rightUnionArray[i].getDConst())); - break; - default: - return node; - } - break; - case EbtUint64: - switch (node->getType().getBasicType()) { - case EbtInt: - leftUnionArray[i].setU64Const(static_cast(rightUnionArray[i].getIConst())); - break; - case EbtUint: - leftUnionArray[i].setU64Const(static_cast(rightUnionArray[i].getUConst())); - break; - case EbtInt64: - leftUnionArray[i].setU64Const(static_cast(rightUnionArray[i].getI64Const())); - break; - case EbtUint64: - leftUnionArray[i] = rightUnionArray[i]; - break; - case EbtBool: - leftUnionArray[i].setU64Const(static_cast(rightUnionArray[i].getBConst())); - break; - case EbtFloat: - case EbtDouble: - case EbtFloat16: - leftUnionArray[i].setU64Const(static_cast(rightUnionArray[i].getDConst())); - break; - default: - return node; - } - break; - default: - return node; + +#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast(rightUnionArray[i].Get())); + +#define TO_ALL(Get) \ + switch (promoteTo) { \ + case EbtFloat16: PROMOTE(setDConst, double, Get); break; \ + case EbtFloat: PROMOTE(setDConst, double, Get); break; \ + case EbtDouble: PROMOTE(setDConst, double, Get); break; \ + case EbtInt8: PROMOTE(setI8Const, char, Get); break; \ + case EbtInt16: PROMOTE(setI16Const, short, Get); break; \ + case EbtInt: PROMOTE(setIConst, int, Get); break; \ + case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \ + case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \ + case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \ + case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \ + case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \ + case EbtBool: PROMOTE(setBConst, bool, Get); break; \ + default: return node; \ + } + + switch (node->getType().getBasicType()) { + case EbtFloat16: TO_ALL(getDConst); break; + case EbtFloat: TO_ALL(getDConst); break; + case EbtDouble: TO_ALL(getDConst); break; + case EbtInt8: TO_ALL(getI8Const); break; + case EbtInt16: TO_ALL(getI16Const); break; + case EbtInt: TO_ALL(getIConst); break; + case EbtInt64: TO_ALL(getI64Const); break; + case EbtUint8: TO_ALL(getU8Const); break; + case EbtUint16: TO_ALL(getU16Const); break; + case EbtUint: TO_ALL(getUConst); break; + case EbtUint64: TO_ALL(getU64Const); break; + case EbtBool: TO_ALL(getBConst); break; + default: return node; } } From 6cca0e983ee18b778c4bfcd736a08e0f8053f70a Mon Sep 17 00:00:00 2001 From: Shahbaz Youssefi Date: Tue, 25 Jun 2019 12:08:10 -0400 Subject: [PATCH 19/42] Remove extraneous semicolons They cause a warning (-Wextra-semi) that can lead to a compile error (-Werror). --- SPIRV/SPVRemapper.h | 2 +- SPIRV/spvIR.h | 2 +- glslang/MachineIndependent/Intermediate.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SPIRV/SPVRemapper.h b/SPIRV/SPVRemapper.h index fa61bb94..d6b9c346 100644 --- a/SPIRV/SPVRemapper.h +++ b/SPIRV/SPVRemapper.h @@ -195,7 +195,7 @@ private: // Header access & set methods spirword_t magic() const { return spv[0]; } // return magic number spirword_t bound() const { return spv[3]; } // return Id bound from header - spirword_t bound(spirword_t b) { return spv[3] = b; }; + spirword_t bound(spirword_t b) { return spv[3] = b; } spirword_t genmagic() const { return spv[2]; } // generator magic spirword_t genmagic(spirword_t m) { return spv[2] = m; } spirword_t schemaNum() const { return spv[4]; } // schema number from header diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h index b3cd0b06..7e2d4bc1 100755 --- a/SPIRV/spvIR.h +++ b/SPIRV/spvIR.h @@ -436,6 +436,6 @@ __inline void Block::addInstruction(std::unique_ptr inst) parent.getParent().mapInstruction(raw_instruction); } -}; // end spv namespace +} // end spv namespace #endif // spvIR_H diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 640e738a..e20068f0 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -3789,7 +3789,7 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC for (int i=0; i < size; i++) { -#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast(rightUnionArray[i].Get())); +#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast(rightUnionArray[i].Get())) #define TO_ALL(Get) \ switch (promoteTo) { \ From f4edb8f820a85d5c6d786cf2aea75836cf4bb884 Mon Sep 17 00:00:00 2001 From: Shahbaz Youssefi Date: Tue, 25 Jun 2019 12:09:55 -0400 Subject: [PATCH 20/42] Remove __DATE__ and __TIME__ usage These macros result in a non-deterministic build. In chromium, these macros are specifically set to empty, resulting in a compile error. --- StandAlone/spirv-remap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StandAlone/spirv-remap.cpp b/StandAlone/spirv-remap.cpp index 998f7428..5e2ed0ae 100644 --- a/StandAlone/spirv-remap.cpp +++ b/StandAlone/spirv-remap.cpp @@ -227,7 +227,7 @@ namespace { } } else if (arg == "--version" || arg == "-V") { - std::cout << basename(argv[0]) << " version 0.97 " << __DATE__ << " " << __TIME__ << std::endl; + std::cout << basename(argv[0]) << " version 0.97" << std::endl; exit(0); } else if (arg == "--input" || arg == "-i") { // Collect input files From ba6170b534dc7af023375a613a7869f43637ae7e Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Mon, 1 Jul 2019 09:23:23 -0500 Subject: [PATCH 21/42] Implement GL_EXT_demote_to_helper_invocation --- SPIRV/GLSL.ext.EXT.h | 1 + SPIRV/GlslangToSpv.cpp | 13 + SPIRV/doc.cpp | 4 + SPIRV/spirv.hpp | 12 +- .../spv.conditionalDemote.frag.out | 70 + Test/baseResults/spv.demoteDisabled.frag.out | 6 + Test/spv.conditionalDemote.frag | 18 + Test/spv.demoteDisabled.frag | 10 + glslang/Include/intermediate.h | 3 + glslang/MachineIndependent/Initialize.cpp | 8 + glslang/MachineIndependent/Scan.cpp | 7 + glslang/MachineIndependent/Versions.cpp | 2 + glslang/MachineIndependent/Versions.h | 1 + glslang/MachineIndependent/glslang.y | 13 +- glslang/MachineIndependent/glslang_tab.cpp | 6120 +++++++++-------- glslang/MachineIndependent/glslang_tab.cpp.h | 751 +- glslang/MachineIndependent/intermOut.cpp | 3 + gtests/Spv.FromFile.cpp | 2 + 18 files changed, 3618 insertions(+), 3426 deletions(-) create mode 100644 Test/baseResults/spv.conditionalDemote.frag.out create mode 100644 Test/baseResults/spv.demoteDisabled.frag.out create mode 100644 Test/spv.conditionalDemote.frag create mode 100644 Test/spv.demoteDisabled.frag diff --git a/SPIRV/GLSL.ext.EXT.h b/SPIRV/GLSL.ext.EXT.h index e29c055b..40164b61 100644 --- a/SPIRV/GLSL.ext.EXT.h +++ b/SPIRV/GLSL.ext.EXT.h @@ -34,5 +34,6 @@ static const char* const E_SPV_EXT_shader_stencil_export = "SPV_EXT_shade static const char* const E_SPV_EXT_shader_viewport_index_layer = "SPV_EXT_shader_viewport_index_layer"; static const char* const E_SPV_EXT_fragment_fully_covered = "SPV_EXT_fragment_fully_covered"; static const char* const E_SPV_EXT_fragment_invocation_density = "SPV_EXT_fragment_invocation_density"; +static const char* const E_SPV_EXT_demote_to_helper_invocation = "SPV_EXT_demote_to_helper_invocation"; #endif // #ifndef GLSLextEXT_H diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 16d90b89..7b1393c7 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -3111,6 +3111,12 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T builder.clearAccessChain(); break; + case glslang::EOpDemote: + builder.createNoResultOp(spv::OpDemoteToHelperInvocationEXT); + builder.addExtension(spv::E_SPV_EXT_demote_to_helper_invocation); + builder.addCapability(spv::CapabilityDemoteToHelperInvocationEXT); + break; + default: assert(0); break; @@ -7610,6 +7616,13 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv: builder.createNoResultOp(spv::OpEndInvocationInterlockEXT); return 0; + case glslang::EOpIsHelperInvocation: + { + std::vector args; // Dummy arguments + spv::Id id = builder.createOp(spv::OpIsHelperInvocationEXT, typeId, args); + return id; + } + default: logger->missingFunctionality("unknown operation with no arguments"); return 0; diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 3e68345b..f1f042da 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -1367,6 +1367,8 @@ const char* OpcodeString(int op) case OpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV"; case OpCooperativeMatrixMulAddNV: return "OpCooperativeMatrixMulAddNV"; case OpCooperativeMatrixLengthNV: return "OpCooperativeMatrixLengthNV"; + case OpDemoteToHelperInvocationEXT: return "OpDemoteToHelperInvocationEXT"; + case OpIsHelperInvocationEXT: return "OpIsHelperInvocationEXT"; case OpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT"; case OpEndInvocationInterlockEXT: return "OpEndInvocationInterlockEXT"; @@ -2784,6 +2786,8 @@ void Parameterize() InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'C'"); InstructionDesc[OpCooperativeMatrixLengthNV].operands.push(OperandId, "'Type'"); + + InstructionDesc[OpDemoteToHelperInvocationEXT].setResultAndType(false, false); } }; // end spv namespace diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index bbaf47c4..a584aaf8 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -455,6 +455,7 @@ enum Decoration { DecorationHlslCounterBufferGOOGLE = 5634, DecorationHlslSemanticGOOGLE = 5635, DecorationUserSemantic = 5635, + DecorationUserTypeGOOGLE = 5636, DecorationMax = 0x7fffffff, }; @@ -632,7 +633,7 @@ enum MemorySemanticsShift { MemorySemanticsOutputMemoryKHRShift = 12, MemorySemanticsMakeAvailableKHRShift = 13, MemorySemanticsMakeVisibleKHRShift = 14, - MemorySemanticsVolatileShift = 15, + MemorySemanticsVolatileShift = 15, MemorySemanticsMax = 0x7fffffff, }; @@ -650,8 +651,8 @@ enum MemorySemanticsMask { MemorySemanticsImageMemoryMask = 0x00000800, MemorySemanticsOutputMemoryKHRMask = 0x00001000, MemorySemanticsMakeAvailableKHRMask = 0x00002000, - MemorySemanticsMakeVisibleKHRMask = 0x00004000, - MemorySemanticsVolatileMask = 0x00008000, + MemorySemanticsMakeVisibleKHRMask = 0x00004000, + MemorySemanticsVolatileMask = 0x00008000, }; enum MemoryAccessShift { @@ -845,6 +846,7 @@ enum Capability { CapabilityFragmentShaderShadingRateInterlockEXT = 5372, CapabilityShaderSMBuiltinsNV = 5373, CapabilityFragmentShaderPixelInterlockEXT = 5378, + CapabilityDemoteToHelperInvocationEXT = 5379, CapabilitySubgroupShuffleINTEL = 5568, CapabilitySubgroupBufferBlockIOINTEL = 5569, CapabilitySubgroupImageBlockIOINTEL = 5570, @@ -1233,6 +1235,8 @@ enum Op { OpCooperativeMatrixLengthNV = 5362, OpBeginInvocationInterlockEXT = 5364, OpEndInvocationInterlockEXT = 5365, + OpDemoteToHelperInvocationEXT = 5380, + OpIsHelperInvocationEXT = 5381, OpSubgroupShuffleINTEL = 5571, OpSubgroupShuffleDownINTEL = 5572, OpSubgroupShuffleUpINTEL = 5573, @@ -1907,6 +1911,8 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break; case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; + case OpDemoteToHelperInvocationEXT: *hasResult = false; *hasResultType = false; break; + case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; } } #endif /* SPV_ENABLE_UTILITY_CODE */ diff --git a/Test/baseResults/spv.conditionalDemote.frag.out b/Test/baseResults/spv.conditionalDemote.frag.out new file mode 100644 index 00000000..6e350192 --- /dev/null +++ b/Test/baseResults/spv.conditionalDemote.frag.out @@ -0,0 +1,70 @@ +spv.conditionalDemote.frag +Validation failed +// Module Version 10000 +// Generated by (magic number): 80007 +// Id's are bound by 38 + + Capability Shader + Capability Bad + Extension "SPV_EXT_demote_to_helper_invocation" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 17 36 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + SourceExtension "GL_EXT_demote_to_helper_invocation" + Name 4 "main" + Name 9 "v" + Name 13 "tex" + Name 17 "coord" + Name 33 "x" + Name 36 "o" + Decorate 13(tex) DescriptorSet 0 + Decorate 13(tex) Binding 0 + Decorate 17(coord) Location 0 + Decorate 36(o) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypeImage 6(float) 2D sampled format:Unknown + 11: TypeSampledImage 10 + 12: TypePointer UniformConstant 11 + 13(tex): 12(ptr) Variable UniformConstant + 15: TypeVector 6(float) 2 + 16: TypePointer Input 15(fvec2) + 17(coord): 16(ptr) Variable Input + 21: 6(float) Constant 1036831949 + 22: 6(float) Constant 1045220557 + 23: 6(float) Constant 1050253722 + 24: 6(float) Constant 1053609165 + 25: 7(fvec4) ConstantComposite 21 22 23 24 + 26: TypeBool + 27: TypeVector 26(bool) 4 + 32: TypePointer Function 26(bool) + 35: TypePointer Output 7(fvec4) + 36(o): 35(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 9(v): 8(ptr) Variable Function + 33(x): 32(ptr) Variable Function + 14: 11 Load 13(tex) + 18: 15(fvec2) Load 17(coord) + 19: 7(fvec4) ImageSampleImplicitLod 14 18 + Store 9(v) 19 + 20: 7(fvec4) Load 9(v) + 28: 27(bvec4) FOrdEqual 20 25 + 29: 26(bool) All 28 + SelectionMerge 31 None + BranchConditional 29 30 31 + 30: Label + DemoteToHelperInvocationEXT + Branch 31 + 31: Label + 34: 26(bool) IsHelperInvocationEXT + Store 33(x) 34 + 37: 7(fvec4) Load 9(v) + Store 36(o) 37 + Return + FunctionEnd diff --git a/Test/baseResults/spv.demoteDisabled.frag.out b/Test/baseResults/spv.demoteDisabled.frag.out new file mode 100644 index 00000000..382fa56d --- /dev/null +++ b/Test/baseResults/spv.demoteDisabled.frag.out @@ -0,0 +1,6 @@ +spv.demoteDisabled.frag +ERROR: 0:9: 'demote' : undeclared identifier +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/spv.conditionalDemote.frag b/Test/spv.conditionalDemote.frag new file mode 100644 index 00000000..1f9b238a --- /dev/null +++ b/Test/spv.conditionalDemote.frag @@ -0,0 +1,18 @@ +#version 460 core +#extension GL_EXT_demote_to_helper_invocation : enable + +layout(set = 0, binding = 0) uniform sampler2D tex; +layout(location = 0) in vec2 coord; +layout(location = 0) out vec4 o; + +void main (void) +{ + vec4 v = texture(tex, coord); + + if (v == vec4(0.1,0.2,0.3,0.4)) + demote; + + bool x = helperInvocationEXT(); + + o = v; +} diff --git a/Test/spv.demoteDisabled.frag b/Test/spv.demoteDisabled.frag new file mode 100644 index 00000000..fca702d6 --- /dev/null +++ b/Test/spv.demoteDisabled.frag @@ -0,0 +1,10 @@ +#version 460 core + +void main (void) +{ + { + int demote = 0; + demote; + } + demote; +} diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index f7424e88..903a75d1 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -624,6 +624,8 @@ enum TOperator { EOpBeginInvocationInterlock, // Fragment only EOpEndInvocationInterlock, // Fragment only + EOpIsHelperInvocation, + // // Branch // @@ -634,6 +636,7 @@ enum TOperator { EOpContinue, EOpCase, EOpDefault, + EOpDemote, // Fragment only // // Constructors diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index fc362e0c..2fcc32be 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -5034,6 +5034,10 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "void beginInvocationInterlockARB(void);" "void endInvocationInterlockARB(void);"); + stageBuiltins[EShLangFragment].append( + "bool helperInvocationEXT();" + "\n"); + #ifdef AMD_EXTENSIONS // GL_AMD_shader_explicit_vertex_parameter if (profile != EEsProfile && version >= 450) { @@ -8641,6 +8645,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_StorageSemanticsImage", 1, &E_GL_KHR_memory_scope_semantics); symbolTable.setVariableExtensions("gl_StorageSemanticsOutput", 1, &E_GL_KHR_memory_scope_semantics); } + + symbolTable.setFunctionExtensions("helperInvocationEXT", 1, &E_GL_EXT_demote_to_helper_invocation); break; case EShLangCompute: @@ -9295,6 +9301,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("findLSB", EOpFindLSB); symbolTable.relateToOperator("findMSB", EOpFindMSB); + symbolTable.relateToOperator("helperInvocationEXT", EOpIsHelperInvocation); + if (PureOperatorBuiltins) { symbolTable.relateToOperator("imageSize", EOpImageQuerySize); symbolTable.relateToOperator("imageSamples", EOpImageQuerySamples); diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp index 482f6ba2..119b0bc1 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -356,6 +356,7 @@ void TScanContext::fillInKeywordMap() (*KeywordMap)["default"] = DEFAULT; (*KeywordMap)["if"] = IF; (*KeywordMap)["else"] = ELSE; + (*KeywordMap)["demote"] = DEMOTE; (*KeywordMap)["discard"] = DISCARD; (*KeywordMap)["return"] = RETURN; (*KeywordMap)["void"] = VOID; @@ -1621,6 +1622,12 @@ int TScanContext::tokenizeIdentifier() return keyword; return identifierOrType(); + case DEMOTE: + if (parseContext.extensionTurnedOn(E_GL_EXT_demote_to_helper_invocation)) + return keyword; + else + return identifierOrType(); + default: parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc); return 0; diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 4054ac84..253f6cd4 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -211,6 +211,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_fragment_invocation_density] = EBhDisable; extensionBehavior[E_GL_EXT_buffer_reference] = EBhDisable; extensionBehavior[E_GL_EXT_buffer_reference2] = EBhDisable; + extensionBehavior[E_GL_EXT_demote_to_helper_invocation] = EBhDisable; extensionBehavior[E_GL_EXT_shader_16bit_storage] = EBhDisable; extensionBehavior[E_GL_EXT_shader_8bit_storage] = EBhDisable; @@ -394,6 +395,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_fragment_invocation_density 1\n" "#define GL_EXT_buffer_reference 1\n" "#define GL_EXT_buffer_reference2 1\n" + "#define GL_EXT_demote_to_helper_invocation 1\n" // GL_KHR_shader_subgroup "#define GL_KHR_shader_subgroup_basic 1\n" diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 6c945029..02d2266f 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -173,6 +173,7 @@ const char* const E_GL_EXT_scalar_block_layout = "GL_EXT_scalar_blo const char* const E_GL_EXT_fragment_invocation_density = "GL_EXT_fragment_invocation_density"; const char* const E_GL_EXT_buffer_reference = "GL_EXT_buffer_reference"; const char* const E_GL_EXT_buffer_reference2 = "GL_EXT_buffer_reference2"; +const char* const E_GL_EXT_demote_to_helper_invocation = "GL_EXT_demote_to_helper_invocation"; // Arrays of extensions for the above viewportEXTs duplications diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index b5691a29..97595725 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -128,7 +128,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %token ATTRIBUTE VARYING %token FLOAT16_T FLOAT FLOAT32_T DOUBLE FLOAT64_T %token CONST BOOL INT UINT INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T -%token BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT SUBROUTINE +%token BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT SUBROUTINE DEMOTE %token BVEC2 BVEC3 BVEC4 %token IVEC2 IVEC3 IVEC4 %token UVEC2 UVEC3 UVEC4 @@ -265,7 +265,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %type declaration external_declaration %type for_init_statement compound_statement_no_new_scope %type selection_rest_statement for_rest_statement -%type iteration_statement iteration_statement_nonattributed jump_statement statement_no_new_scope statement_scoped +%type iteration_statement iteration_statement_nonattributed jump_statement statement_no_new_scope statement_scoped demote_statement %type single_declaration init_declarator_list %type parameter_declaration parameter_declarator parameter_type_specifier @@ -3416,6 +3416,15 @@ simple_statement | case_label { $$ = $1; } | iteration_statement { $$ = $1; } | jump_statement { $$ = $1; } + | demote_statement { $$ = $1; } + ; + +demote_statement + : DEMOTE SEMICOLON { + parseContext.requireStage($1.loc, EShLangFragment, "demote"); + parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote"); + $$ = parseContext.intermediate.addBranch(EOpDemote, $1.loc); + } ; compound_statement diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index 07feffea..a52b486f 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -154,380 +154,381 @@ extern int yydebug; CASE = 286, DEFAULT = 287, SUBROUTINE = 288, - BVEC2 = 289, - BVEC3 = 290, - BVEC4 = 291, - IVEC2 = 292, - IVEC3 = 293, - IVEC4 = 294, - UVEC2 = 295, - UVEC3 = 296, - UVEC4 = 297, - I64VEC2 = 298, - I64VEC3 = 299, - I64VEC4 = 300, - U64VEC2 = 301, - U64VEC3 = 302, - U64VEC4 = 303, - I32VEC2 = 304, - I32VEC3 = 305, - I32VEC4 = 306, - U32VEC2 = 307, - U32VEC3 = 308, - U32VEC4 = 309, - I16VEC2 = 310, - I16VEC3 = 311, - I16VEC4 = 312, - U16VEC2 = 313, - U16VEC3 = 314, - U16VEC4 = 315, - I8VEC2 = 316, - I8VEC3 = 317, - I8VEC4 = 318, - U8VEC2 = 319, - U8VEC3 = 320, - U8VEC4 = 321, - VEC2 = 322, - VEC3 = 323, - VEC4 = 324, - MAT2 = 325, - MAT3 = 326, - MAT4 = 327, - CENTROID = 328, - IN = 329, - OUT = 330, - INOUT = 331, - UNIFORM = 332, - PATCH = 333, - SAMPLE = 334, - BUFFER = 335, - SHARED = 336, - NONUNIFORM = 337, - PAYLOADNV = 338, - PAYLOADINNV = 339, - HITATTRNV = 340, - CALLDATANV = 341, - CALLDATAINNV = 342, - COHERENT = 343, - VOLATILE = 344, - RESTRICT = 345, - READONLY = 346, - WRITEONLY = 347, - DEVICECOHERENT = 348, - QUEUEFAMILYCOHERENT = 349, - WORKGROUPCOHERENT = 350, - SUBGROUPCOHERENT = 351, - NONPRIVATE = 352, - DVEC2 = 353, - DVEC3 = 354, - DVEC4 = 355, - DMAT2 = 356, - DMAT3 = 357, - DMAT4 = 358, - F16VEC2 = 359, - F16VEC3 = 360, - F16VEC4 = 361, - F16MAT2 = 362, - F16MAT3 = 363, - F16MAT4 = 364, - F32VEC2 = 365, - F32VEC3 = 366, - F32VEC4 = 367, - F32MAT2 = 368, - F32MAT3 = 369, - F32MAT4 = 370, - F64VEC2 = 371, - F64VEC3 = 372, - F64VEC4 = 373, - F64MAT2 = 374, - F64MAT3 = 375, - F64MAT4 = 376, - NOPERSPECTIVE = 377, - FLAT = 378, - SMOOTH = 379, - LAYOUT = 380, - EXPLICITINTERPAMD = 381, - PERVERTEXNV = 382, - PERPRIMITIVENV = 383, - PERVIEWNV = 384, - PERTASKNV = 385, - MAT2X2 = 386, - MAT2X3 = 387, - MAT2X4 = 388, - MAT3X2 = 389, - MAT3X3 = 390, - MAT3X4 = 391, - MAT4X2 = 392, - MAT4X3 = 393, - MAT4X4 = 394, - DMAT2X2 = 395, - DMAT2X3 = 396, - DMAT2X4 = 397, - DMAT3X2 = 398, - DMAT3X3 = 399, - DMAT3X4 = 400, - DMAT4X2 = 401, - DMAT4X3 = 402, - DMAT4X4 = 403, - F16MAT2X2 = 404, - F16MAT2X3 = 405, - F16MAT2X4 = 406, - F16MAT3X2 = 407, - F16MAT3X3 = 408, - F16MAT3X4 = 409, - F16MAT4X2 = 410, - F16MAT4X3 = 411, - F16MAT4X4 = 412, - F32MAT2X2 = 413, - F32MAT2X3 = 414, - F32MAT2X4 = 415, - F32MAT3X2 = 416, - F32MAT3X3 = 417, - F32MAT3X4 = 418, - F32MAT4X2 = 419, - F32MAT4X3 = 420, - F32MAT4X4 = 421, - F64MAT2X2 = 422, - F64MAT2X3 = 423, - F64MAT2X4 = 424, - F64MAT3X2 = 425, - F64MAT3X3 = 426, - F64MAT3X4 = 427, - F64MAT4X2 = 428, - F64MAT4X3 = 429, - F64MAT4X4 = 430, - ATOMIC_UINT = 431, - ACCSTRUCTNV = 432, - FCOOPMATNV = 433, - SAMPLER1D = 434, - SAMPLER2D = 435, - SAMPLER3D = 436, - SAMPLERCUBE = 437, - SAMPLER1DSHADOW = 438, - SAMPLER2DSHADOW = 439, - SAMPLERCUBESHADOW = 440, - SAMPLER1DARRAY = 441, - SAMPLER2DARRAY = 442, - SAMPLER1DARRAYSHADOW = 443, - SAMPLER2DARRAYSHADOW = 444, - ISAMPLER1D = 445, - ISAMPLER2D = 446, - ISAMPLER3D = 447, - ISAMPLERCUBE = 448, - ISAMPLER1DARRAY = 449, - ISAMPLER2DARRAY = 450, - USAMPLER1D = 451, - USAMPLER2D = 452, - USAMPLER3D = 453, - USAMPLERCUBE = 454, - USAMPLER1DARRAY = 455, - USAMPLER2DARRAY = 456, - SAMPLER2DRECT = 457, - SAMPLER2DRECTSHADOW = 458, - ISAMPLER2DRECT = 459, - USAMPLER2DRECT = 460, - SAMPLERBUFFER = 461, - ISAMPLERBUFFER = 462, - USAMPLERBUFFER = 463, - SAMPLERCUBEARRAY = 464, - SAMPLERCUBEARRAYSHADOW = 465, - ISAMPLERCUBEARRAY = 466, - USAMPLERCUBEARRAY = 467, - SAMPLER2DMS = 468, - ISAMPLER2DMS = 469, - USAMPLER2DMS = 470, - SAMPLER2DMSARRAY = 471, - ISAMPLER2DMSARRAY = 472, - USAMPLER2DMSARRAY = 473, - SAMPLEREXTERNALOES = 474, - SAMPLEREXTERNAL2DY2YEXT = 475, - F16SAMPLER1D = 476, - F16SAMPLER2D = 477, - F16SAMPLER3D = 478, - F16SAMPLER2DRECT = 479, - F16SAMPLERCUBE = 480, - F16SAMPLER1DARRAY = 481, - F16SAMPLER2DARRAY = 482, - F16SAMPLERCUBEARRAY = 483, - F16SAMPLERBUFFER = 484, - F16SAMPLER2DMS = 485, - F16SAMPLER2DMSARRAY = 486, - F16SAMPLER1DSHADOW = 487, - F16SAMPLER2DSHADOW = 488, - F16SAMPLER1DARRAYSHADOW = 489, - F16SAMPLER2DARRAYSHADOW = 490, - F16SAMPLER2DRECTSHADOW = 491, - F16SAMPLERCUBESHADOW = 492, - F16SAMPLERCUBEARRAYSHADOW = 493, - SAMPLER = 494, - SAMPLERSHADOW = 495, - TEXTURE1D = 496, - TEXTURE2D = 497, - TEXTURE3D = 498, - TEXTURECUBE = 499, - TEXTURE1DARRAY = 500, - TEXTURE2DARRAY = 501, - ITEXTURE1D = 502, - ITEXTURE2D = 503, - ITEXTURE3D = 504, - ITEXTURECUBE = 505, - ITEXTURE1DARRAY = 506, - ITEXTURE2DARRAY = 507, - UTEXTURE1D = 508, - UTEXTURE2D = 509, - UTEXTURE3D = 510, - UTEXTURECUBE = 511, - UTEXTURE1DARRAY = 512, - UTEXTURE2DARRAY = 513, - TEXTURE2DRECT = 514, - ITEXTURE2DRECT = 515, - UTEXTURE2DRECT = 516, - TEXTUREBUFFER = 517, - ITEXTUREBUFFER = 518, - UTEXTUREBUFFER = 519, - TEXTURECUBEARRAY = 520, - ITEXTURECUBEARRAY = 521, - UTEXTURECUBEARRAY = 522, - TEXTURE2DMS = 523, - ITEXTURE2DMS = 524, - UTEXTURE2DMS = 525, - TEXTURE2DMSARRAY = 526, - ITEXTURE2DMSARRAY = 527, - UTEXTURE2DMSARRAY = 528, - F16TEXTURE1D = 529, - F16TEXTURE2D = 530, - F16TEXTURE3D = 531, - F16TEXTURE2DRECT = 532, - F16TEXTURECUBE = 533, - F16TEXTURE1DARRAY = 534, - F16TEXTURE2DARRAY = 535, - F16TEXTURECUBEARRAY = 536, - F16TEXTUREBUFFER = 537, - F16TEXTURE2DMS = 538, - F16TEXTURE2DMSARRAY = 539, - SUBPASSINPUT = 540, - SUBPASSINPUTMS = 541, - ISUBPASSINPUT = 542, - ISUBPASSINPUTMS = 543, - USUBPASSINPUT = 544, - USUBPASSINPUTMS = 545, - F16SUBPASSINPUT = 546, - F16SUBPASSINPUTMS = 547, - IMAGE1D = 548, - IIMAGE1D = 549, - UIMAGE1D = 550, - IMAGE2D = 551, - IIMAGE2D = 552, - UIMAGE2D = 553, - IMAGE3D = 554, - IIMAGE3D = 555, - UIMAGE3D = 556, - IMAGE2DRECT = 557, - IIMAGE2DRECT = 558, - UIMAGE2DRECT = 559, - IMAGECUBE = 560, - IIMAGECUBE = 561, - UIMAGECUBE = 562, - IMAGEBUFFER = 563, - IIMAGEBUFFER = 564, - UIMAGEBUFFER = 565, - IMAGE1DARRAY = 566, - IIMAGE1DARRAY = 567, - UIMAGE1DARRAY = 568, - IMAGE2DARRAY = 569, - IIMAGE2DARRAY = 570, - UIMAGE2DARRAY = 571, - IMAGECUBEARRAY = 572, - IIMAGECUBEARRAY = 573, - UIMAGECUBEARRAY = 574, - IMAGE2DMS = 575, - IIMAGE2DMS = 576, - UIMAGE2DMS = 577, - IMAGE2DMSARRAY = 578, - IIMAGE2DMSARRAY = 579, - UIMAGE2DMSARRAY = 580, - F16IMAGE1D = 581, - F16IMAGE2D = 582, - F16IMAGE3D = 583, - F16IMAGE2DRECT = 584, - F16IMAGECUBE = 585, - F16IMAGE1DARRAY = 586, - F16IMAGE2DARRAY = 587, - F16IMAGECUBEARRAY = 588, - F16IMAGEBUFFER = 589, - F16IMAGE2DMS = 590, - F16IMAGE2DMSARRAY = 591, - STRUCT = 592, - VOID = 593, - WHILE = 594, - IDENTIFIER = 595, - TYPE_NAME = 596, - FLOATCONSTANT = 597, - DOUBLECONSTANT = 598, - INT16CONSTANT = 599, - UINT16CONSTANT = 600, - INT32CONSTANT = 601, - UINT32CONSTANT = 602, - INTCONSTANT = 603, - UINTCONSTANT = 604, - INT64CONSTANT = 605, - UINT64CONSTANT = 606, - BOOLCONSTANT = 607, - FLOAT16CONSTANT = 608, - LEFT_OP = 609, - RIGHT_OP = 610, - INC_OP = 611, - DEC_OP = 612, - LE_OP = 613, - GE_OP = 614, - EQ_OP = 615, - NE_OP = 616, - AND_OP = 617, - OR_OP = 618, - XOR_OP = 619, - MUL_ASSIGN = 620, - DIV_ASSIGN = 621, - ADD_ASSIGN = 622, - MOD_ASSIGN = 623, - LEFT_ASSIGN = 624, - RIGHT_ASSIGN = 625, - AND_ASSIGN = 626, - XOR_ASSIGN = 627, - OR_ASSIGN = 628, - SUB_ASSIGN = 629, - LEFT_PAREN = 630, - RIGHT_PAREN = 631, - LEFT_BRACKET = 632, - RIGHT_BRACKET = 633, - LEFT_BRACE = 634, - RIGHT_BRACE = 635, - DOT = 636, - COMMA = 637, - COLON = 638, - EQUAL = 639, - SEMICOLON = 640, - BANG = 641, - DASH = 642, - TILDE = 643, - PLUS = 644, - STAR = 645, - SLASH = 646, - PERCENT = 647, - LEFT_ANGLE = 648, - RIGHT_ANGLE = 649, - VERTICAL_BAR = 650, - CARET = 651, - AMPERSAND = 652, - QUESTION = 653, - INVARIANT = 654, - PRECISE = 655, - HIGH_PRECISION = 656, - MEDIUM_PRECISION = 657, - LOW_PRECISION = 658, - PRECISION = 659, - PACKED = 660, - RESOURCE = 661, - SUPERP = 662 + DEMOTE = 289, + BVEC2 = 290, + BVEC3 = 291, + BVEC4 = 292, + IVEC2 = 293, + IVEC3 = 294, + IVEC4 = 295, + UVEC2 = 296, + UVEC3 = 297, + UVEC4 = 298, + I64VEC2 = 299, + I64VEC3 = 300, + I64VEC4 = 301, + U64VEC2 = 302, + U64VEC3 = 303, + U64VEC4 = 304, + I32VEC2 = 305, + I32VEC3 = 306, + I32VEC4 = 307, + U32VEC2 = 308, + U32VEC3 = 309, + U32VEC4 = 310, + I16VEC2 = 311, + I16VEC3 = 312, + I16VEC4 = 313, + U16VEC2 = 314, + U16VEC3 = 315, + U16VEC4 = 316, + I8VEC2 = 317, + I8VEC3 = 318, + I8VEC4 = 319, + U8VEC2 = 320, + U8VEC3 = 321, + U8VEC4 = 322, + VEC2 = 323, + VEC3 = 324, + VEC4 = 325, + MAT2 = 326, + MAT3 = 327, + MAT4 = 328, + CENTROID = 329, + IN = 330, + OUT = 331, + INOUT = 332, + UNIFORM = 333, + PATCH = 334, + SAMPLE = 335, + BUFFER = 336, + SHARED = 337, + NONUNIFORM = 338, + PAYLOADNV = 339, + PAYLOADINNV = 340, + HITATTRNV = 341, + CALLDATANV = 342, + CALLDATAINNV = 343, + COHERENT = 344, + VOLATILE = 345, + RESTRICT = 346, + READONLY = 347, + WRITEONLY = 348, + DEVICECOHERENT = 349, + QUEUEFAMILYCOHERENT = 350, + WORKGROUPCOHERENT = 351, + SUBGROUPCOHERENT = 352, + NONPRIVATE = 353, + DVEC2 = 354, + DVEC3 = 355, + DVEC4 = 356, + DMAT2 = 357, + DMAT3 = 358, + DMAT4 = 359, + F16VEC2 = 360, + F16VEC3 = 361, + F16VEC4 = 362, + F16MAT2 = 363, + F16MAT3 = 364, + F16MAT4 = 365, + F32VEC2 = 366, + F32VEC3 = 367, + F32VEC4 = 368, + F32MAT2 = 369, + F32MAT3 = 370, + F32MAT4 = 371, + F64VEC2 = 372, + F64VEC3 = 373, + F64VEC4 = 374, + F64MAT2 = 375, + F64MAT3 = 376, + F64MAT4 = 377, + NOPERSPECTIVE = 378, + FLAT = 379, + SMOOTH = 380, + LAYOUT = 381, + EXPLICITINTERPAMD = 382, + PERVERTEXNV = 383, + PERPRIMITIVENV = 384, + PERVIEWNV = 385, + PERTASKNV = 386, + MAT2X2 = 387, + MAT2X3 = 388, + MAT2X4 = 389, + MAT3X2 = 390, + MAT3X3 = 391, + MAT3X4 = 392, + MAT4X2 = 393, + MAT4X3 = 394, + MAT4X4 = 395, + DMAT2X2 = 396, + DMAT2X3 = 397, + DMAT2X4 = 398, + DMAT3X2 = 399, + DMAT3X3 = 400, + DMAT3X4 = 401, + DMAT4X2 = 402, + DMAT4X3 = 403, + DMAT4X4 = 404, + F16MAT2X2 = 405, + F16MAT2X3 = 406, + F16MAT2X4 = 407, + F16MAT3X2 = 408, + F16MAT3X3 = 409, + F16MAT3X4 = 410, + F16MAT4X2 = 411, + F16MAT4X3 = 412, + F16MAT4X4 = 413, + F32MAT2X2 = 414, + F32MAT2X3 = 415, + F32MAT2X4 = 416, + F32MAT3X2 = 417, + F32MAT3X3 = 418, + F32MAT3X4 = 419, + F32MAT4X2 = 420, + F32MAT4X3 = 421, + F32MAT4X4 = 422, + F64MAT2X2 = 423, + F64MAT2X3 = 424, + F64MAT2X4 = 425, + F64MAT3X2 = 426, + F64MAT3X3 = 427, + F64MAT3X4 = 428, + F64MAT4X2 = 429, + F64MAT4X3 = 430, + F64MAT4X4 = 431, + ATOMIC_UINT = 432, + ACCSTRUCTNV = 433, + FCOOPMATNV = 434, + SAMPLER1D = 435, + SAMPLER2D = 436, + SAMPLER3D = 437, + SAMPLERCUBE = 438, + SAMPLER1DSHADOW = 439, + SAMPLER2DSHADOW = 440, + SAMPLERCUBESHADOW = 441, + SAMPLER1DARRAY = 442, + SAMPLER2DARRAY = 443, + SAMPLER1DARRAYSHADOW = 444, + SAMPLER2DARRAYSHADOW = 445, + ISAMPLER1D = 446, + ISAMPLER2D = 447, + ISAMPLER3D = 448, + ISAMPLERCUBE = 449, + ISAMPLER1DARRAY = 450, + ISAMPLER2DARRAY = 451, + USAMPLER1D = 452, + USAMPLER2D = 453, + USAMPLER3D = 454, + USAMPLERCUBE = 455, + USAMPLER1DARRAY = 456, + USAMPLER2DARRAY = 457, + SAMPLER2DRECT = 458, + SAMPLER2DRECTSHADOW = 459, + ISAMPLER2DRECT = 460, + USAMPLER2DRECT = 461, + SAMPLERBUFFER = 462, + ISAMPLERBUFFER = 463, + USAMPLERBUFFER = 464, + SAMPLERCUBEARRAY = 465, + SAMPLERCUBEARRAYSHADOW = 466, + ISAMPLERCUBEARRAY = 467, + USAMPLERCUBEARRAY = 468, + SAMPLER2DMS = 469, + ISAMPLER2DMS = 470, + USAMPLER2DMS = 471, + SAMPLER2DMSARRAY = 472, + ISAMPLER2DMSARRAY = 473, + USAMPLER2DMSARRAY = 474, + SAMPLEREXTERNALOES = 475, + SAMPLEREXTERNAL2DY2YEXT = 476, + F16SAMPLER1D = 477, + F16SAMPLER2D = 478, + F16SAMPLER3D = 479, + F16SAMPLER2DRECT = 480, + F16SAMPLERCUBE = 481, + F16SAMPLER1DARRAY = 482, + F16SAMPLER2DARRAY = 483, + F16SAMPLERCUBEARRAY = 484, + F16SAMPLERBUFFER = 485, + F16SAMPLER2DMS = 486, + F16SAMPLER2DMSARRAY = 487, + F16SAMPLER1DSHADOW = 488, + F16SAMPLER2DSHADOW = 489, + F16SAMPLER1DARRAYSHADOW = 490, + F16SAMPLER2DARRAYSHADOW = 491, + F16SAMPLER2DRECTSHADOW = 492, + F16SAMPLERCUBESHADOW = 493, + F16SAMPLERCUBEARRAYSHADOW = 494, + SAMPLER = 495, + SAMPLERSHADOW = 496, + TEXTURE1D = 497, + TEXTURE2D = 498, + TEXTURE3D = 499, + TEXTURECUBE = 500, + TEXTURE1DARRAY = 501, + TEXTURE2DARRAY = 502, + ITEXTURE1D = 503, + ITEXTURE2D = 504, + ITEXTURE3D = 505, + ITEXTURECUBE = 506, + ITEXTURE1DARRAY = 507, + ITEXTURE2DARRAY = 508, + UTEXTURE1D = 509, + UTEXTURE2D = 510, + UTEXTURE3D = 511, + UTEXTURECUBE = 512, + UTEXTURE1DARRAY = 513, + UTEXTURE2DARRAY = 514, + TEXTURE2DRECT = 515, + ITEXTURE2DRECT = 516, + UTEXTURE2DRECT = 517, + TEXTUREBUFFER = 518, + ITEXTUREBUFFER = 519, + UTEXTUREBUFFER = 520, + TEXTURECUBEARRAY = 521, + ITEXTURECUBEARRAY = 522, + UTEXTURECUBEARRAY = 523, + TEXTURE2DMS = 524, + ITEXTURE2DMS = 525, + UTEXTURE2DMS = 526, + TEXTURE2DMSARRAY = 527, + ITEXTURE2DMSARRAY = 528, + UTEXTURE2DMSARRAY = 529, + F16TEXTURE1D = 530, + F16TEXTURE2D = 531, + F16TEXTURE3D = 532, + F16TEXTURE2DRECT = 533, + F16TEXTURECUBE = 534, + F16TEXTURE1DARRAY = 535, + F16TEXTURE2DARRAY = 536, + F16TEXTURECUBEARRAY = 537, + F16TEXTUREBUFFER = 538, + F16TEXTURE2DMS = 539, + F16TEXTURE2DMSARRAY = 540, + SUBPASSINPUT = 541, + SUBPASSINPUTMS = 542, + ISUBPASSINPUT = 543, + ISUBPASSINPUTMS = 544, + USUBPASSINPUT = 545, + USUBPASSINPUTMS = 546, + F16SUBPASSINPUT = 547, + F16SUBPASSINPUTMS = 548, + IMAGE1D = 549, + IIMAGE1D = 550, + UIMAGE1D = 551, + IMAGE2D = 552, + IIMAGE2D = 553, + UIMAGE2D = 554, + IMAGE3D = 555, + IIMAGE3D = 556, + UIMAGE3D = 557, + IMAGE2DRECT = 558, + IIMAGE2DRECT = 559, + UIMAGE2DRECT = 560, + IMAGECUBE = 561, + IIMAGECUBE = 562, + UIMAGECUBE = 563, + IMAGEBUFFER = 564, + IIMAGEBUFFER = 565, + UIMAGEBUFFER = 566, + IMAGE1DARRAY = 567, + IIMAGE1DARRAY = 568, + UIMAGE1DARRAY = 569, + IMAGE2DARRAY = 570, + IIMAGE2DARRAY = 571, + UIMAGE2DARRAY = 572, + IMAGECUBEARRAY = 573, + IIMAGECUBEARRAY = 574, + UIMAGECUBEARRAY = 575, + IMAGE2DMS = 576, + IIMAGE2DMS = 577, + UIMAGE2DMS = 578, + IMAGE2DMSARRAY = 579, + IIMAGE2DMSARRAY = 580, + UIMAGE2DMSARRAY = 581, + F16IMAGE1D = 582, + F16IMAGE2D = 583, + F16IMAGE3D = 584, + F16IMAGE2DRECT = 585, + F16IMAGECUBE = 586, + F16IMAGE1DARRAY = 587, + F16IMAGE2DARRAY = 588, + F16IMAGECUBEARRAY = 589, + F16IMAGEBUFFER = 590, + F16IMAGE2DMS = 591, + F16IMAGE2DMSARRAY = 592, + STRUCT = 593, + VOID = 594, + WHILE = 595, + IDENTIFIER = 596, + TYPE_NAME = 597, + FLOATCONSTANT = 598, + DOUBLECONSTANT = 599, + INT16CONSTANT = 600, + UINT16CONSTANT = 601, + INT32CONSTANT = 602, + UINT32CONSTANT = 603, + INTCONSTANT = 604, + UINTCONSTANT = 605, + INT64CONSTANT = 606, + UINT64CONSTANT = 607, + BOOLCONSTANT = 608, + FLOAT16CONSTANT = 609, + LEFT_OP = 610, + RIGHT_OP = 611, + INC_OP = 612, + DEC_OP = 613, + LE_OP = 614, + GE_OP = 615, + EQ_OP = 616, + NE_OP = 617, + AND_OP = 618, + OR_OP = 619, + XOR_OP = 620, + MUL_ASSIGN = 621, + DIV_ASSIGN = 622, + ADD_ASSIGN = 623, + MOD_ASSIGN = 624, + LEFT_ASSIGN = 625, + RIGHT_ASSIGN = 626, + AND_ASSIGN = 627, + XOR_ASSIGN = 628, + OR_ASSIGN = 629, + SUB_ASSIGN = 630, + LEFT_PAREN = 631, + RIGHT_PAREN = 632, + LEFT_BRACKET = 633, + RIGHT_BRACKET = 634, + LEFT_BRACE = 635, + RIGHT_BRACE = 636, + DOT = 637, + COMMA = 638, + COLON = 639, + EQUAL = 640, + SEMICOLON = 641, + BANG = 642, + DASH = 643, + TILDE = 644, + PLUS = 645, + STAR = 646, + SLASH = 647, + PERCENT = 648, + LEFT_ANGLE = 649, + RIGHT_ANGLE = 650, + VERTICAL_BAR = 651, + CARET = 652, + AMPERSAND = 653, + QUESTION = 654, + INVARIANT = 655, + PRECISE = 656, + HIGH_PRECISION = 657, + MEDIUM_PRECISION = 658, + LOW_PRECISION = 659, + PRECISION = 660, + PACKED = 661, + RESOURCE = 662, + SUPERP = 663 }; #endif @@ -572,7 +573,7 @@ union YYSTYPE glslang::TArraySizes* typeParameters; } interm; -#line 576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355 */ +#line 577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -603,7 +604,7 @@ int yyparse (glslang::TParseContext* pParseContext); extern int yylex(YYSTYPE*, TParseContext&); -#line 607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358 */ +#line 608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358 */ #ifdef short # undef short @@ -845,21 +846,21 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 384 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 9348 +#define YYLAST 9372 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 408 +#define YYNTOKENS 409 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 110 +#define YYNNTS 111 /* YYNRULES -- Number of rules. */ -#define YYNRULES 578 +#define YYNRULES 580 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 722 +#define YYNSTATES 725 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 662 +#define YYMAXUTOK 663 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -934,7 +935,7 @@ static const yytype_uint16 yytranslate[] = 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407 + 405, 406, 407, 408 }; #if YYDEBUG @@ -992,13 +993,14 @@ static const yytype_uint16 yyrline[] = 3193, 3199, 3205, 3211, 3217, 3223, 3228, 3244, 3249, 3254, 3262, 3262, 3273, 3273, 3283, 3286, 3299, 3321, 3348, 3352, 3358, 3363, 3374, 3377, 3383, 3392, 3395, 3401, 3405, 3406, - 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3422, 3423, 3427, - 3423, 3439, 3440, 3444, 3444, 3451, 3451, 3465, 3468, 3476, - 3484, 3495, 3496, 3500, 3503, 3509, 3516, 3520, 3528, 3532, - 3545, 3548, 3554, 3554, 3574, 3577, 3583, 3595, 3607, 3610, - 3616, 3616, 3631, 3631, 3647, 3647, 3668, 3671, 3677, 3680, - 3686, 3690, 3697, 3702, 3707, 3714, 3717, 3726, 3730, 3739, - 3742, 3745, 3753, 3753, 3775, 3781, 3784, 3789, 3792 + 3412, 3413, 3414, 3415, 3416, 3417, 3418, 3419, 3423, 3431, + 3432, 3436, 3432, 3448, 3449, 3453, 3453, 3460, 3460, 3474, + 3477, 3485, 3493, 3504, 3505, 3509, 3512, 3518, 3525, 3529, + 3537, 3541, 3554, 3557, 3563, 3563, 3583, 3586, 3592, 3604, + 3616, 3619, 3625, 3625, 3640, 3640, 3656, 3656, 3677, 3680, + 3686, 3689, 3695, 3699, 3706, 3711, 3716, 3723, 3726, 3735, + 3739, 3748, 3751, 3754, 3762, 3762, 3784, 3790, 3793, 3798, + 3801 }; #endif @@ -1012,16 +1014,16 @@ static const char *const yytname[] = "UINT", "INT64_T", "UINT64_T", "INT32_T", "UINT32_T", "INT16_T", "UINT16_T", "INT8_T", "UINT8_T", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF", "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", - "SUBROUTINE", "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4", - "UVEC2", "UVEC3", "UVEC4", "I64VEC2", "I64VEC3", "I64VEC4", "U64VEC2", - "U64VEC3", "U64VEC4", "I32VEC2", "I32VEC3", "I32VEC4", "U32VEC2", - "U32VEC3", "U32VEC4", "I16VEC2", "I16VEC3", "I16VEC4", "U16VEC2", - "U16VEC3", "U16VEC4", "I8VEC2", "I8VEC3", "I8VEC4", "U8VEC2", "U8VEC3", - "U8VEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "CENTROID", - "IN", "OUT", "INOUT", "UNIFORM", "PATCH", "SAMPLE", "BUFFER", "SHARED", - "NONUNIFORM", "PAYLOADNV", "PAYLOADINNV", "HITATTRNV", "CALLDATANV", - "CALLDATAINNV", "COHERENT", "VOLATILE", "RESTRICT", "READONLY", - "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT", + "SUBROUTINE", "DEMOTE", "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3", + "IVEC4", "UVEC2", "UVEC3", "UVEC4", "I64VEC2", "I64VEC3", "I64VEC4", + "U64VEC2", "U64VEC3", "U64VEC4", "I32VEC2", "I32VEC3", "I32VEC4", + "U32VEC2", "U32VEC3", "U32VEC4", "I16VEC2", "I16VEC3", "I16VEC4", + "U16VEC2", "U16VEC3", "U16VEC4", "I8VEC2", "I8VEC3", "I8VEC4", "U8VEC2", + "U8VEC3", "U8VEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", + "CENTROID", "IN", "OUT", "INOUT", "UNIFORM", "PATCH", "SAMPLE", "BUFFER", + "SHARED", "NONUNIFORM", "PAYLOADNV", "PAYLOADINNV", "HITATTRNV", + "CALLDATANV", "CALLDATAINNV", "COHERENT", "VOLATILE", "RESTRICT", + "READONLY", "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT", "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE", "DVEC2", "DVEC3", "DVEC4", "DMAT2", "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4", "F16MAT2", "F16MAT3", "F16MAT4", "F32VEC2", "F32VEC3", "F32VEC4", @@ -1120,8 +1122,8 @@ static const char *const yytname[] = "$@3", "$@4", "struct_declaration_list", "struct_declaration", "struct_declarator_list", "struct_declarator", "initializer", "initializer_list", "declaration_statement", "statement", - "simple_statement", "compound_statement", "$@5", "$@6", - "statement_no_new_scope", "statement_scoped", "$@7", "$@8", + "simple_statement", "demote_statement", "compound_statement", "$@5", + "$@6", "statement_no_new_scope", "statement_scoped", "$@7", "$@8", "compound_statement_no_new_scope", "statement_list", "expression_statement", "selection_statement", "selection_statement_nonattributed", "selection_rest_statement", @@ -1180,16 +1182,16 @@ static const yytype_uint16 yytoknum[] = 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, - 655, 656, 657, 658, 659, 660, 661, 662 + 655, 656, 657, 658, 659, 660, 661, 662, 663 }; # endif -#define YYPACT_NINF -659 +#define YYPACT_NINF -657 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-659))) + (!!((Yystate) == (-657))) -#define YYTABLE_NINF -524 +#define YYTABLE_NINF -526 #define yytable_value_is_error(Yytable_value) \ 0 @@ -1198,79 +1200,79 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - 3535, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -331, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -324, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -319, -659, -659, -659, -659, -659, - -659, -659, -659, -256, -659, -314, -351, -309, -306, 5942, - -257, -659, -217, -659, -659, -659, -659, 4338, -659, -659, - -659, -659, -241, -659, -659, 721, -659, -659, -204, -71, - -219, -659, 9007, -349, -659, -659, -215, -659, 5942, -659, - -659, -659, 5942, -178, -172, -659, -337, -267, -659, -659, - -659, 8237, -207, -659, -659, -659, -659, -341, -659, -211, - -330, -659, -659, 5942, -210, 6697, -659, -322, 1123, -659, - -659, -659, -659, -207, -328, -659, 7082, -304, -659, -163, - -659, -252, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -659, -659, -659, 8237, 8237, 8237, -659, -659, - -659, -659, -659, -659, -303, -659, -659, -659, -196, -299, - 8622, -194, -659, 8237, -659, -659, -355, -195, -659, -157, - 8237, -659, -71, 5942, 5942, -155, 4739, -659, -659, -659, - -659, -242, -236, -249, -335, -206, -191, -187, -209, -149, - -150, -333, -162, 7467, -659, -170, -168, -659, -154, -153, - -167, 7852, -152, 8237, -159, -148, -151, -160, -659, -659, - -274, -659, -659, -251, -659, -351, -147, -144, -659, -659, - -659, -659, 1525, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -19, -195, 7082, -302, 7082, -659, -659, 7082, - 5942, -659, -115, -659, -659, -659, -292, -659, -659, 8237, - -108, -659, -659, 8237, -143, -659, -659, -659, 8237, -659, - -659, -659, -659, -659, 5140, -155, -207, -250, -659, -659, - -659, 8237, 8237, 8237, 8237, 8237, 8237, 8237, 8237, 8237, - 8237, 8237, 8237, 8237, 8237, 8237, 8237, 8237, 8237, 8237, - -659, -659, -659, -142, -659, -659, 1927, -659, 8237, -659, - -659, -245, 8237, -226, -659, -659, -106, -659, 1927, -659, - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - 8237, 8237, -659, -659, -659, -659, -659, -659, -659, 7082, - -659, -238, -659, 5541, -659, -659, -141, -140, -659, -659, - -659, -659, -244, -195, -155, -659, -659, -659, -659, -242, - -242, -236, -236, -249, -249, -249, -249, -335, -335, -206, - -191, -187, -209, -149, -150, 8237, -659, -104, 3133, -263, - -659, -260, -659, 3937, -136, -297, -659, 1927, -659, -659, - -659, -659, 6312, -659, -659, -659, -659, -224, -135, -659, - -659, 3937, -138, -659, -140, -97, 5942, -132, 8237, -133, - -106, -134, -659, -659, 8237, 8237, -659, -137, -129, 224, - -128, 2731, -659, -127, -131, 2329, -126, -659, -659, -659, - -659, -255, 8237, 2329, -138, -659, -659, 1927, 7082, -659, - -659, -659, -659, -130, -140, -659, -659, 1927, -123, -659, - -659, -659 + 3545, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -328, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -307, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -318, -657, -657, -657, -657, -657, + -657, -657, -657, -259, -657, -320, -286, -236, -251, 5958, + -299, -657, -191, -657, -657, -657, -657, 4350, -657, -657, + -657, -657, -228, -657, -657, 724, -657, -657, -176, -72, + -212, -657, 9030, -352, -657, -657, -211, -657, 5958, -657, + -657, -657, 5958, -171, -169, -657, -324, -285, -657, -657, + -657, 8258, -205, -657, -657, -657, -657, -281, -657, -210, + -280, -657, -657, 5958, -208, 6714, -657, -345, 1127, -657, + -657, -657, -657, -205, -325, -657, 7100, -322, -657, -167, + -657, -271, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, 8258, 8258, 8258, -657, -657, + -657, -657, -657, -657, -327, -657, -657, -657, -198, -278, + 8644, -196, -657, 8258, -657, -657, -355, -197, -657, -159, + 8258, -657, -72, 5958, 5958, -158, 4752, -657, -657, -657, + -657, -245, -305, -291, -323, -209, -214, -207, -204, -178, + -177, -340, -192, 7486, -657, -193, -190, -657, -187, -182, + -189, 7872, -181, 8258, -186, -185, -174, -179, -172, -657, + -657, -293, -657, -657, -253, -657, -286, -165, -164, -657, + -657, -657, -657, -657, 1530, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -19, -197, 7100, -292, 7100, -657, + -657, 7100, 5958, -657, -141, -657, -657, -657, -273, -657, + -657, 8258, -137, -657, -657, 8258, -163, -657, -657, -657, + 8258, -657, -657, -657, -657, -657, 5154, -158, -205, -252, + -657, -657, -657, 8258, 8258, 8258, 8258, 8258, 8258, 8258, + 8258, 8258, 8258, 8258, 8258, 8258, 8258, 8258, 8258, 8258, + 8258, 8258, -657, -657, -657, -166, -657, -657, 1933, -657, + 8258, -657, -657, -246, 8258, -229, -657, -657, -657, -136, + -657, 1933, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, 8258, 8258, -657, -657, -657, -657, -657, + -657, -657, 7100, -657, -232, -657, 5556, -657, -657, -142, + -145, -657, -657, -657, -657, -244, -197, -158, -657, -657, + -657, -657, -245, -245, -305, -305, -291, -291, -291, -291, + -323, -323, -209, -214, -207, -204, -178, -177, 8258, -657, + -101, 3142, -269, -657, -261, -657, 3948, -135, -344, -657, + 1933, -657, -657, -657, -657, 6328, -657, -657, -657, -657, + -227, -134, -657, -657, 3948, -140, -657, -145, -97, 5958, + -132, 8258, -133, -136, -131, -657, -657, 8258, 8258, -657, + -139, -129, 224, -128, 2739, -657, -127, -130, 2336, -126, + -657, -657, -657, -657, -254, 8258, 2336, -140, -657, -657, + 1933, 7100, -657, -657, -657, -657, -124, -145, -657, -657, + 1933, -125, -657, -657, -657 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1310,14 +1312,14 @@ static const yytype_uint16 yydefact[] = 444, 445, 446, 448, 449, 450, 452, 453, 454, 456, 457, 458, 460, 461, 462, 464, 465, 466, 468, 469, 470, 472, 473, 431, 435, 439, 443, 447, 455, 459, - 463, 451, 467, 471, 0, 199, 486, 571, 131, 146, - 487, 488, 489, 0, 570, 0, 572, 0, 108, 107, + 463, 451, 467, 471, 0, 199, 486, 573, 131, 146, + 487, 488, 489, 0, 572, 0, 574, 0, 108, 107, 0, 119, 124, 153, 152, 150, 154, 0, 147, 149, - 155, 129, 195, 151, 485, 0, 567, 569, 0, 0, + 155, 129, 195, 151, 485, 0, 569, 571, 0, 0, 0, 492, 0, 0, 96, 93, 0, 106, 0, 115, 109, 117, 0, 118, 0, 94, 125, 0, 99, 148, - 130, 0, 188, 194, 1, 568, 186, 0, 145, 143, - 0, 141, 490, 0, 0, 0, 97, 0, 0, 573, + 130, 0, 188, 194, 1, 570, 186, 0, 145, 143, + 0, 141, 490, 0, 0, 0, 97, 0, 0, 575, 110, 114, 116, 112, 120, 111, 0, 126, 102, 0, 100, 0, 2, 12, 13, 10, 11, 4, 5, 6, 7, 8, 9, 15, 14, 0, 0, 0, 42, 41, @@ -1325,64 +1327,66 @@ static const yytype_uint16 yydefact[] = 29, 0, 197, 0, 35, 33, 0, 189, 184, 0, 0, 140, 0, 0, 0, 0, 0, 494, 95, 190, 44, 48, 51, 54, 59, 62, 64, 66, 68, 70, - 72, 74, 0, 0, 98, 0, 0, 552, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 518, 527, 531, - 44, 77, 90, 0, 507, 0, 155, 129, 510, 529, - 509, 508, 0, 511, 512, 533, 513, 540, 514, 515, - 548, 516, 0, 113, 0, 121, 0, 502, 128, 0, - 0, 104, 0, 101, 37, 38, 0, 21, 22, 0, - 0, 27, 26, 0, 199, 30, 32, 39, 0, 196, - 187, 92, 144, 142, 0, 0, 500, 0, 498, 493, - 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 72, 74, 0, 0, 98, 0, 0, 554, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 520, 529, + 533, 44, 77, 90, 0, 507, 0, 155, 129, 510, + 531, 509, 517, 508, 0, 511, 512, 535, 513, 542, + 514, 515, 550, 516, 0, 113, 0, 121, 0, 502, + 128, 0, 0, 104, 0, 101, 37, 38, 0, 21, + 22, 0, 0, 27, 26, 0, 199, 30, 32, 39, + 0, 196, 187, 92, 144, 142, 0, 0, 500, 0, + 498, 493, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 75, 191, 192, 0, 563, 562, 0, 554, 0, 566, - 564, 0, 0, 0, 547, 550, 0, 517, 0, 80, - 81, 83, 82, 85, 86, 87, 88, 89, 84, 79, - 0, 0, 532, 528, 530, 534, 541, 549, 123, 0, - 505, 0, 127, 0, 105, 16, 0, 23, 20, 31, - 198, 491, 0, 501, 0, 496, 45, 46, 47, 50, - 49, 52, 53, 57, 58, 55, 56, 60, 61, 63, - 65, 67, 69, 71, 73, 0, 193, 0, 0, 0, - 565, 0, 546, 0, 577, 0, 575, 519, 78, 91, - 122, 503, 0, 103, 18, 497, 499, 0, 0, 557, - 556, 559, 525, 542, 538, 0, 0, 0, 0, 0, - 0, 0, 504, 506, 0, 0, 558, 0, 0, 537, - 0, 0, 535, 0, 0, 0, 0, 574, 576, 520, - 76, 0, 560, 0, 525, 524, 526, 544, 0, 522, - 551, 521, 578, 0, 561, 555, 536, 545, 0, 539, - 553, 543 + 0, 0, 75, 191, 192, 0, 565, 564, 0, 556, + 0, 568, 566, 0, 0, 0, 549, 518, 552, 0, + 519, 0, 80, 81, 83, 82, 85, 86, 87, 88, + 89, 84, 79, 0, 0, 534, 530, 532, 536, 543, + 551, 123, 0, 505, 0, 127, 0, 105, 16, 0, + 23, 20, 31, 198, 491, 0, 501, 0, 496, 45, + 46, 47, 50, 49, 52, 53, 57, 58, 55, 56, + 60, 61, 63, 65, 67, 69, 71, 73, 0, 193, + 0, 0, 0, 567, 0, 548, 0, 579, 0, 577, + 521, 78, 91, 122, 503, 0, 103, 18, 497, 499, + 0, 0, 559, 558, 561, 527, 544, 540, 0, 0, + 0, 0, 0, 0, 0, 504, 506, 0, 0, 560, + 0, 0, 539, 0, 0, 537, 0, 0, 0, 0, + 576, 578, 522, 76, 0, 562, 0, 527, 526, 528, + 546, 0, 524, 553, 523, 580, 0, 563, 557, 538, + 547, 0, 541, 555, 545 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, - -659, -659, -364, -659, -389, -385, -457, -384, -310, -307, - -305, -308, -301, -298, -659, -386, -659, -390, -659, -415, - -418, 1, -659, -659, -659, 2, -659, -659, -659, -110, - -105, -107, -659, -659, -628, -659, -659, -659, -659, -188, - -659, -336, -343, -659, 6, -659, 0, -334, -659, -659, - -659, -659, -67, -659, -659, -659, -431, -437, -277, -350, - -501, -659, -375, -488, -658, -414, -659, -659, -428, -426, - -659, -659, -87, -568, -368, -659, -231, -659, -388, -659, - -230, -659, -659, -659, -659, -228, -659, -659, -659, -659, - -659, -659, -659, -659, -70, -659, -659, -659, -659, -394 + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -337, -657, -398, -395, -435, -404, -312, -310, + -309, -311, -306, -308, -657, -383, -657, -397, -657, -413, + -421, 1, -657, -657, -657, 2, -657, -657, -657, -107, + -102, -105, -657, -657, -629, -657, -657, -657, -657, -180, + -657, -336, -343, -657, 6, -657, 0, -357, -657, -657, + -657, -657, -63, -657, -657, -657, -431, -439, -276, -354, + -503, -657, -377, -484, -656, -657, -417, -657, -657, -429, + -428, -657, -657, -88, -575, -370, -657, -231, -657, -392, + -657, -230, -657, -657, -657, -657, -226, -657, -657, -657, + -657, -657, -657, -657, -657, -70, -657, -657, -657, -657, + -396 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 432, 433, 434, 616, 435, 436, 437, 438, 439, - 440, 441, 490, 443, 461, 462, 463, 464, 465, 466, - 467, 468, 469, 470, 471, 491, 645, 492, 600, 493, - 542, 494, 335, 520, 411, 495, 337, 338, 339, 369, + -1, 432, 433, 434, 619, 435, 436, 437, 438, 439, + 440, 441, 491, 443, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 492, 648, 493, 603, 494, + 544, 495, 335, 522, 411, 496, 337, 338, 339, 369, 370, 371, 340, 341, 342, 343, 344, 345, 390, 391, 346, 347, 348, 349, 444, 387, 445, 397, 382, 383, - 446, 352, 353, 354, 453, 393, 456, 457, 547, 548, - 518, 611, 498, 499, 500, 501, 588, 681, 710, 689, - 690, 691, 711, 502, 503, 504, 505, 692, 677, 506, - 507, 693, 718, 508, 509, 510, 653, 576, 648, 671, - 687, 688, 511, 355, 356, 357, 366, 512, 655, 656 + 446, 352, 353, 354, 453, 393, 456, 457, 549, 550, + 520, 614, 499, 500, 501, 502, 503, 591, 684, 713, + 692, 693, 694, 714, 504, 505, 506, 507, 695, 680, + 508, 509, 696, 721, 510, 511, 512, 656, 578, 651, + 674, 690, 691, 513, 355, 356, 357, 366, 514, 658, + 659 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1390,363 +1394,82 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 351, 334, 336, 372, 379, 477, 350, 478, 479, 472, - 388, 482, 526, 608, 604, 610, 517, 442, 612, 550, - 657, 360, 544, 558, 559, 675, 363, 538, 395, 379, - 569, 460, 372, 706, 365, 448, 396, 709, 405, 539, - 395, 449, 407, 675, 358, 709, 451, 406, 447, 395, - 535, 359, 452, 527, 528, 473, 514, 454, 560, 561, - 361, 524, 525, 474, 541, 570, 581, 367, 583, 513, - 515, 364, -34, 473, 529, 473, 368, 532, 530, 537, - 519, 679, 609, 533, 615, 680, 460, 573, 647, 613, - 601, 589, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 633, 634, 635, 636, 556, 557, 550, 660, 460, - 599, 379, 408, 672, 617, 409, 673, 454, 410, 601, - 454, 713, 601, 376, 517, 374, 517, 601, 375, 517, - 522, 601, 624, 523, 602, 625, 386, 601, 624, 717, - 650, 665, 661, 619, 662, 330, 331, 332, 551, 552, - 553, 554, 381, 555, 562, 563, 601, 652, 601, 684, - 392, 683, 403, 649, 398, 629, 630, 651, 404, 604, - 395, 631, 632, 450, 620, 458, 550, 521, 637, 638, - 531, 536, 473, 540, 454, 546, 566, 626, 627, 628, + 351, 334, 336, 372, 379, 477, 350, 478, 479, 519, + 388, 482, 472, 611, 528, 613, 660, 552, 615, 407, + 607, 363, 546, 360, 571, 447, 395, 678, 540, 379, + 529, 530, 372, 473, 396, 682, 560, 561, 709, 683, + 541, 474, 712, 537, 442, 678, 515, 517, 358, -34, + 712, 531, 405, 395, 395, 532, 473, 454, 460, 572, + 516, 406, 361, 521, 558, 559, 364, 543, 583, 359, + 585, 562, 563, 592, 593, 594, 595, 596, 597, 598, + 599, 600, 601, 556, 374, 557, 473, 375, 526, 527, + 575, 616, 602, 612, 650, 408, 448, 451, 409, 534, + 365, 410, 449, 452, 618, 535, 539, 552, 675, 663, + 604, 379, 524, 460, 604, 525, 676, 454, 620, 519, + 454, 519, 604, 716, 519, 636, 637, 638, 639, 604, + 604, 627, 368, 605, 628, 720, 460, 604, 622, 627, + 653, 367, 668, 330, 331, 332, 553, 554, 555, 664, + 376, 665, 564, 565, 604, 655, 604, 687, 632, 633, + 640, 641, 686, 634, 635, 386, 381, 652, 392, 398, + 403, 654, 404, 395, 523, 450, 607, 552, 458, 533, + 538, 473, 542, 548, 566, 569, 454, 573, 570, 579, + 567, 626, 568, 576, 580, 584, 577, 581, 586, 589, + 617, 587, 588, 623, 621, 657, 661, 662, 722, 590, + 454, -35, -33, 649, -28, 519, 629, 630, 631, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, - 460, 460, 460, 460, 460, 460, 564, 719, 454, 565, - 658, 659, 623, 567, 568, 574, 571, 575, 579, 517, - 587, 577, 578, 582, 584, 614, 586, 585, -35, 604, - 667, -33, 618, -28, 654, 668, 646, 664, 674, 678, - 685, -523, 601, 694, 695, 697, 699, 703, 702, 704, - 712, 487, 707, 708, 639, 720, 674, 721, 640, 642, - 696, 641, 401, 400, 543, 402, 362, 643, 622, 389, - 701, 644, 517, 669, 666, 715, 705, 454, 716, 399, - 670, 605, 606, 686, 607, 385, 698, 714, 0, 0, - 0, 0, 541, 0, 700, 0, 0, 0, 0, 0, + 460, 460, 460, 460, 460, 670, 607, 667, 604, 671, + -525, 681, 688, 677, 697, 698, 700, 705, 706, 707, + 702, 715, 488, 710, 642, 711, 724, 643, 645, 644, + 699, 677, 723, 647, 646, 401, 400, 402, 519, 389, + 362, 625, 545, 669, 672, 704, 708, 718, 399, 719, + 454, 673, 689, 608, 609, 385, 0, 701, 610, 0, + 703, 0, 717, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 460, 0, 0, 676, 517, 0, - 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 379, 0, 676, 0, 0, 0, 373, - 0, 0, 0, 0, 0, 350, 0, 380, 0, 0, + 0, 0, 0, 0, 519, 0, 0, 0, 0, 0, + 679, 486, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 379, 0, 679, 373, + 0, 0, 0, 0, 460, 350, 0, 380, 0, 0, 0, 0, 0, 350, 0, 351, 334, 336, 0, 0, 0, 350, 394, 0, 0, 0, 0, 0, 373, 0, 0, 0, 373, 0, 350, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 455, 0, 0, 0, 0, 497, 350, - 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, + 0, 0, 0, 455, 0, 0, 0, 0, 498, 350, + 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 455, 545, 0, 455, 0, 0, 350, + 0, 0, 0, 455, 547, 0, 455, 0, 0, 350, 350, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 497, 0, 0, 0, 0, 0, 496, 0, + 0, 0, 0, 0, 498, 0, 0, 0, 0, 0, + 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 455, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 455, 0, 0, 0, 0, 0, 350, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, - 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, - 0, 0, 496, 0, 0, 0, 0, 0, 497, 0, - 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 455, 0, 0, 0, 0, 0, 350, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, - 0, 0, 0, 497, 496, 0, 0, 497, 0, 496, - 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, - 0, 497, 0, 0, 0, 0, 380, 496, 0, 0, + 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, + 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 498, 0, + 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, + 0, 498, 0, 0, 0, 0, 0, 497, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 455, 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, 0, 0, 0, - 0, 497, 0, 0, 0, 497, 0, 496, 0, 0, - 0, 496, 0, 497, 0, 0, 0, 497, 0, 496, - 0, 0, 0, 496, 0, 0, 0, 497, 0, 0, - 0, 384, 0, 496, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, - 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, - 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 327, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 328, 329, 330, 331, 332, 333, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 475, 476, 477, 0, 478, - 479, 480, 481, 482, 483, 484, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 325, 485, 412, 326, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 0, 0, 425, - 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, - 486, 0, 487, 488, 0, 0, 0, 0, 489, 428, - 429, 430, 431, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 328, 329, 330, 331, 332, 333, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 475, 476, 477, - 0, 478, 479, 480, 481, 482, 483, 484, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, - 322, 323, 324, 325, 485, 412, 326, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 0, - 0, 425, 426, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 427, 0, 486, 0, 487, 603, 0, 0, 0, 0, - 489, 428, 429, 430, 431, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 328, 329, 330, 331, 332, 333, - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 475, - 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, 323, 324, 325, 485, 412, 326, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 0, 0, 425, 426, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 427, 0, 486, 0, 487, 0, 0, 0, - 0, 0, 489, 428, 429, 430, 431, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 328, 329, 330, 331, - 332, 333, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 475, 476, 477, 0, 478, 479, 480, 481, 482, - 483, 484, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 485, 412, - 326, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 0, 0, 425, 426, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 427, 0, 486, 0, 398, 0, - 0, 0, 0, 0, 489, 428, 429, 430, 431, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, - 330, 331, 332, 333, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 475, 476, 477, 0, 478, 479, 480, - 481, 482, 483, 484, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, - 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, - 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, - 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, - 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, - 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, - 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, - 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, - 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, - 485, 412, 326, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 0, 0, 425, 426, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 427, 0, 486, 0, - 0, 0, 0, 0, 0, 0, 489, 428, 429, 430, - 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 328, 329, 330, 331, 332, 333, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, - 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, - 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, - 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, - 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, - 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, - 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, - 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 324, 325, 0, 412, 326, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 0, 0, 425, - 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 489, 428, - 429, 430, 431, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 328, 329, 330, 331, 332, 333, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, + 0, 498, 0, 0, 0, 0, 498, 497, 0, 0, + 498, 0, 497, 0, 0, 0, 497, 0, 0, 0, + 0, 0, 0, 0, 498, 0, 0, 0, 0, 380, + 497, 0, 0, 0, 0, 350, 0, 0, 0, 0, + 0, 0, 0, 0, 498, 0, 0, 0, 498, 0, + 497, 0, 0, 0, 497, 0, 498, 0, 0, 0, + 498, 0, 497, 0, 0, 0, 497, 0, 0, 0, + 498, 0, 0, 0, 384, 0, 497, 1, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 20, 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, @@ -1785,49 +1508,9 @@ static const yytype_int16 yytable[] = 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, 330, 331, 332, 333, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, 323, 324, 325, 0, 412, 326, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 0, 0, 425, 426, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 428, 429, 430, 431, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 328, 329, 330, 331, - 332, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 475, + 476, 477, 0, 478, 479, 480, 481, 482, 483, 484, + 20, 485, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, @@ -1857,17 +1540,460 @@ static const yytype_int16 yytable[] = 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, 325, 0, 377, 326, + 319, 320, 321, 322, 323, 324, 325, 486, 412, 326, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 0, 0, 425, 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 378, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 427, 0, 487, 0, 488, 489, 0, + 0, 0, 0, 490, 428, 429, 430, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, 330, - 331, 332, 1, 2, 3, 4, 5, 6, 7, 8, + 331, 332, 333, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 475, 476, 477, 0, 478, 479, 480, 481, + 482, 483, 484, 20, 485, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 486, 412, 326, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 0, 0, 425, 426, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 427, 0, 487, 0, + 488, 606, 0, 0, 0, 0, 490, 428, 429, 430, + 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 328, 329, 330, 331, 332, 333, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 475, 476, 477, 0, 478, + 479, 480, 481, 482, 483, 484, 20, 485, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 486, 412, 326, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 0, 0, + 425, 426, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, + 0, 487, 0, 488, 0, 0, 0, 0, 0, 490, + 428, 429, 430, 431, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 328, 329, 330, 331, 332, 333, 1, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 475, 476, + 477, 0, 478, 479, 480, 481, 482, 483, 484, 20, + 485, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 486, 412, 326, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 0, 0, 425, 426, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 427, 0, 487, 0, 398, 0, 0, 0, + 0, 0, 490, 428, 429, 430, 431, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 328, 329, 330, 331, + 332, 333, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, + 19, 475, 476, 477, 0, 478, 479, 480, 481, 482, + 483, 484, 20, 485, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 486, + 412, 326, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 0, 0, 425, 426, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 487, 0, 0, + 0, 0, 0, 0, 0, 490, 428, 429, 430, 431, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, + 329, 330, 331, 332, 333, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 20, 0, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 412, 326, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 0, 0, 425, + 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 490, 428, + 429, 430, 431, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 328, 329, 330, 331, 332, 333, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, + 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, + 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, + 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, + 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 0, 0, 326, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 327, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 328, 329, 330, 331, 332, + 333, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 20, 0, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 412, + 326, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 0, 0, 425, 426, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 428, 429, 430, 431, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, + 330, 331, 332, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 20, 0, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 377, 326, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 378, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 328, 329, 330, 331, 332, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 20, 0, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 0, 326, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 328, 329, 330, 331, 332, 1, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 20, 0, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 0, 326, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 624, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 328, 329, 330, 331, 332, 1, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, + 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 0, 326, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 666, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 328, 329, 330, 331, + 332, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 20, 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, @@ -1901,56 +2027,393 @@ static const yytype_int16 yytable[] = 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 4, 5, 6, 7, 0, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, - 330, 331, 332, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 330, 331, 332, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 412, + 326, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 0, 0, 425, 426, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 427, 0, 0, 0, 518, 685, + 0, 0, 0, 0, 0, 428, 429, 430, 431, 3, + 4, 5, 6, 7, 0, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 0, 412, 326, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 0, + 0, 425, 426, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 427, 0, 0, 459, 0, 0, 0, 0, 0, 0, + 0, 428, 429, 430, 431, 3, 4, 5, 6, 7, + 0, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 323, 324, 325, 0, - 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 621, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 329, 330, 331, 332, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, + 0, 0, 0, 0, 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 412, 326, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 0, 0, 425, 426, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, + 518, 0, 0, 0, 0, 0, 0, 428, 429, 430, + 431, 3, 4, 5, 6, 7, 0, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 0, 412, 326, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 0, 0, 425, 426, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 427, 0, 0, 574, 0, 0, 0, 0, + 0, 0, 0, 428, 429, 430, 431, 3, 4, 5, + 6, 7, 0, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 69, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 0, 412, 326, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 0, 0, 425, + 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 582, 428, + 429, 430, 431, 3, 4, 5, 6, 7, 0, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 21, 22, 23, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 0, 412, + 326, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 0, 0, 425, 426, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 428, 429, 430, 431, 3, + 4, 5, 6, 7, 0, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 69, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 536, 0, 412, 326, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 0, + 0, 425, 426, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 428, 429, 430, 431, 3, 4, 5, 6, 7, + 0, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 0, 0, 326 +}; + +static const yytype_int16 yycheck[] = +{ + 0, 0, 0, 339, 347, 24, 0, 26, 27, 406, + 82, 30, 395, 516, 427, 518, 591, 456, 521, 376, + 504, 341, 453, 341, 364, 382, 378, 656, 383, 372, + 357, 358, 368, 378, 386, 379, 359, 360, 694, 383, + 395, 386, 698, 440, 381, 674, 403, 404, 376, 376, + 706, 378, 376, 378, 378, 382, 378, 393, 395, 399, + 385, 385, 380, 385, 355, 356, 386, 450, 481, 376, + 483, 394, 395, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 388, 383, 390, 378, 386, 425, 426, + 473, 522, 385, 385, 578, 380, 377, 377, 383, 377, + 386, 386, 383, 383, 377, 383, 443, 546, 377, 612, + 383, 454, 383, 450, 383, 386, 377, 453, 531, 516, + 456, 518, 383, 377, 521, 560, 561, 562, 563, 383, + 383, 383, 383, 386, 386, 710, 473, 383, 535, 383, + 386, 377, 386, 402, 403, 404, 391, 392, 393, 381, + 341, 383, 361, 362, 383, 384, 383, 384, 556, 557, + 564, 565, 665, 558, 559, 341, 394, 580, 380, 380, + 341, 584, 341, 378, 341, 385, 660, 616, 386, 377, + 376, 378, 341, 341, 398, 363, 522, 379, 365, 376, + 397, 548, 396, 386, 376, 376, 386, 386, 384, 378, + 341, 386, 376, 540, 341, 341, 603, 604, 711, 381, + 546, 376, 376, 379, 377, 612, 553, 554, 555, 556, + 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, + 567, 568, 569, 570, 571, 648, 720, 379, 383, 340, + 380, 376, 376, 656, 341, 377, 379, 386, 377, 25, + 381, 377, 380, 380, 566, 385, 381, 567, 569, 568, + 681, 674, 386, 571, 570, 372, 368, 372, 665, 341, + 333, 547, 452, 627, 651, 688, 693, 706, 366, 707, + 616, 651, 674, 514, 514, 355, -1, 683, 514, -1, + 687, -1, 705, -1, -1, -1, -1, -1, 681, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 711, -1, -1, -1, -1, -1, + 656, 340, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 679, -1, 674, 339, + -1, -1, -1, -1, 681, 339, -1, 347, -1, -1, + -1, -1, -1, 347, -1, 355, 355, 355, -1, -1, + -1, 355, 362, -1, -1, -1, -1, -1, 368, -1, + -1, -1, 372, -1, 368, -1, -1, -1, 372, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 393, -1, -1, -1, -1, 398, 393, + -1, -1, -1, -1, 398, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 453, 454, -1, 456, -1, -1, 453, + 454, -1, 456, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 504, -1, -1, -1, -1, -1, + 504, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 522, -1, -1, -1, -1, -1, 522, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 546, -1, -1, -1, + -1, -1, 546, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 578, -1, + -1, -1, -1, -1, 578, -1, -1, -1, -1, -1, + -1, 591, -1, -1, -1, -1, -1, 591, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 616, -1, -1, -1, + -1, -1, 616, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 651, -1, -1, -1, -1, 656, 651, -1, -1, + 660, -1, 656, -1, -1, -1, 660, -1, -1, -1, + -1, -1, -1, -1, 674, -1, -1, -1, -1, 679, + 674, -1, -1, -1, -1, 679, -1, -1, -1, -1, + -1, -1, -1, -1, 694, -1, -1, -1, 698, -1, + 694, -1, -1, -1, 698, -1, 706, -1, -1, -1, + 710, -1, 706, -1, -1, -1, 710, -1, -1, -1, + 720, -1, -1, -1, 0, -1, 720, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 33, -1, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, @@ -1978,550 +2441,14 @@ static const yytype_int16 yytable[] = 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, - 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 663, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 328, 329, 330, 331, 332, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 0, 0, 326, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, - 6, 7, 0, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, - 0, 328, 329, 330, 331, 332, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 0, 412, 326, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 0, 0, 425, 426, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 516, 682, 0, 0, 0, 0, 0, 428, 429, - 430, 431, 3, 4, 5, 6, 7, 0, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, 323, 324, 325, 0, 412, 326, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 0, 0, 425, 426, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 427, 0, 0, 459, 0, 0, 0, 0, - 0, 0, 0, 428, 429, 430, 431, 3, 4, 5, - 6, 7, 0, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 0, 412, 326, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 0, 0, 425, 426, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 516, 0, 0, 0, 0, 0, 0, 428, 429, - 430, 431, 3, 4, 5, 6, 7, 0, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, 323, 324, 325, 0, 412, 326, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 0, 0, 425, 426, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 427, 0, 0, 572, 0, 0, 0, 0, - 0, 0, 0, 428, 429, 430, 431, 3, 4, 5, - 6, 7, 0, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 0, 412, 326, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 0, 0, 425, 426, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 580, 428, 429, - 430, 431, 3, 4, 5, 6, 7, 0, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, 323, 324, 325, 0, 412, 326, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 0, 0, 425, 426, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 428, 429, 430, 431, 3, 4, 5, - 6, 7, 0, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 69, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 534, 0, 412, 326, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 0, 0, 425, 426, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 428, 429, - 430, 431, 3, 4, 5, 6, 7, 0, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, 323, 324, 325, 0, 0, 326 -}; - -static const yytype_int16 yycheck[] = -{ - 0, 0, 0, 339, 347, 24, 0, 26, 27, 395, - 81, 30, 427, 514, 502, 516, 406, 381, 519, 456, - 588, 340, 453, 358, 359, 653, 340, 382, 377, 372, - 363, 395, 368, 691, 385, 376, 385, 695, 375, 394, - 377, 382, 376, 671, 375, 703, 376, 384, 382, 377, - 440, 375, 382, 356, 357, 377, 384, 393, 393, 394, - 379, 425, 426, 385, 450, 398, 481, 376, 483, 403, - 404, 385, 375, 377, 377, 377, 382, 376, 381, 443, - 384, 378, 384, 382, 376, 382, 450, 473, 576, 520, - 382, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 558, 559, 560, 561, 354, 355, 544, 609, 473, - 384, 454, 379, 376, 529, 382, 376, 453, 385, 382, - 456, 376, 382, 340, 514, 382, 516, 382, 385, 519, - 382, 382, 382, 385, 385, 385, 340, 382, 382, 707, - 385, 385, 380, 533, 382, 401, 402, 403, 390, 391, - 392, 387, 393, 389, 360, 361, 382, 383, 382, 383, - 379, 662, 340, 578, 379, 554, 555, 582, 340, 657, - 377, 556, 557, 384, 538, 385, 613, 340, 562, 563, - 376, 375, 377, 340, 520, 340, 395, 551, 552, 553, - 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, - 564, 565, 566, 567, 568, 569, 397, 708, 544, 396, - 600, 601, 546, 362, 364, 385, 378, 385, 385, 609, - 380, 375, 375, 375, 383, 340, 377, 375, 375, 717, - 645, 375, 340, 376, 340, 339, 378, 378, 653, 375, - 375, 379, 382, 340, 376, 378, 380, 376, 385, 25, - 376, 379, 379, 384, 564, 385, 671, 380, 565, 567, - 678, 566, 372, 368, 452, 372, 333, 568, 545, 340, - 685, 569, 662, 648, 624, 703, 690, 613, 704, 366, - 648, 512, 512, 671, 512, 355, 680, 702, -1, -1, - -1, -1, 678, -1, 684, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 678, -1, -1, 653, 708, -1, - 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 676, -1, 671, -1, -1, -1, 339, - -1, -1, -1, -1, -1, 339, -1, 347, -1, -1, - -1, -1, -1, 347, -1, 355, 355, 355, -1, -1, - -1, 355, 362, -1, -1, -1, -1, -1, 368, -1, - -1, -1, 372, -1, 368, -1, -1, -1, 372, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 393, -1, -1, -1, -1, 398, 393, - -1, -1, -1, -1, 398, -1, -1, -1, -1, -1, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 453, 454, -1, 456, -1, -1, 453, - 454, -1, 456, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 502, -1, -1, -1, -1, -1, 502, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 520, -1, -1, -1, -1, -1, 520, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 544, -1, -1, -1, -1, -1, - 544, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 576, -1, -1, -1, - -1, -1, 576, -1, -1, -1, -1, -1, 588, -1, - -1, -1, -1, -1, 588, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 613, -1, -1, -1, -1, -1, 613, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 648, -1, - -1, -1, -1, 653, 648, -1, -1, 657, -1, 653, - -1, -1, -1, 657, -1, -1, -1, -1, -1, -1, - -1, 671, -1, -1, -1, -1, 676, 671, -1, -1, - -1, -1, 676, -1, -1, -1, -1, -1, -1, -1, - -1, 691, -1, -1, -1, 695, -1, 691, -1, -1, - -1, 695, -1, 703, -1, -1, -1, 707, -1, 703, - -1, -1, -1, 707, -1, -1, -1, 717, -1, -1, - -1, 0, -1, 717, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, - 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - -1, -1, 341, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 385, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 399, 400, 401, 402, 403, 404, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, -1, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, 351, 352, 353, -1, -1, 356, - 357, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 375, -1, - 377, -1, 379, 380, -1, -1, -1, -1, 385, 386, - 387, 388, 389, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 399, 400, 401, 402, 403, 404, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, -1, - -1, 356, 357, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 375, -1, 377, -1, 379, 380, -1, -1, -1, -1, - 385, 386, 387, 388, 389, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 399, 400, 401, 402, 403, 404, + 386, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 400, 401, 402, 403, 404, 405, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, -1, 26, 27, 28, 29, 30, 31, 32, @@ -2557,12 +2484,133 @@ static const yytype_int16 yycheck[] = 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, -1, -1, 356, 357, -1, -1, -1, -1, -1, + 353, 354, -1, -1, 357, 358, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 375, -1, 377, -1, 379, -1, -1, -1, - -1, -1, 385, 386, 387, 388, 389, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 399, 400, 401, 402, - 403, 404, 3, 4, 5, 6, 7, 8, 9, 10, + -1, -1, -1, 376, -1, 378, -1, 380, 381, -1, + -1, -1, -1, 386, 387, 388, 389, 390, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 400, 401, 402, + 403, 404, 405, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, -1, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, -1, 357, 358, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 376, -1, 378, -1, + 380, 381, -1, -1, -1, -1, 386, 387, 388, 389, + 390, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 400, 401, 402, 403, 404, 405, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, -1, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, -1, -1, + 357, 358, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 376, + -1, 378, -1, 380, -1, -1, -1, -1, -1, 386, + 387, 388, 389, 390, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 400, 401, 402, 403, 404, 405, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, -1, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, 358, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 376, -1, 378, -1, 380, -1, -1, -1, + -1, -1, 386, 387, 388, 389, 390, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 400, 401, 402, 403, + 404, 405, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, @@ -2597,336 +2645,15 @@ static const yytype_int16 yycheck[] = 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, -1, -1, 356, 357, -1, -1, -1, + 351, 352, 353, 354, -1, -1, 357, 358, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 375, -1, 377, -1, 379, -1, - -1, -1, -1, -1, 385, 386, 387, 388, 389, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 399, 400, - 401, 402, 403, 404, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, -1, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, - 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, -1, -1, 356, 357, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 375, -1, 377, -1, - -1, -1, -1, -1, -1, -1, 385, 386, 387, 388, - 389, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 399, 400, 401, 402, 403, 404, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 33, 34, 35, 36, - 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, - 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, - 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, - 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, - 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, - 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, - 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, - 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, - 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, -1, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, 351, 352, 353, -1, -1, 356, - 357, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 375, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 385, 386, - 387, 388, 389, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 399, 400, 401, 402, 403, 404, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 33, 34, - 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, - 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, - 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, - 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, - 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, - 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, - 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, - 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 337, 338, -1, -1, 341, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 385, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 399, 400, 401, 402, 403, 404, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, -1, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, -1, -1, 356, 357, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 375, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 386, 387, 388, 389, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 399, 400, 401, 402, - 403, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, - 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, - 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, - 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, - 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, - 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, - 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, - 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, - 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, 336, 337, 338, -1, 340, 341, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 385, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 399, 400, 401, - 402, 403, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, - 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, - 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, - 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, - 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, - 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, - 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, - 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, - 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, - 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, - 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, - 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, -1, -1, - 341, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 380, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 399, 400, - 401, 402, 403, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, - 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, - 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, - 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, - 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, - 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, - 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, - 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, - 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, - 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, 336, 337, 338, -1, - -1, 341, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 380, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 399, - 400, 401, 402, 403, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, - 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, - 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, - 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, - 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, - 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, - 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, - 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, - 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, - 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, - 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, - 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, - 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - -1, -1, 341, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 380, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 399, 400, 401, 402, 403, 3, 4, 5, 6, 7, + -1, -1, -1, -1, -1, 376, -1, 378, -1, -1, + -1, -1, -1, -1, -1, 386, 387, 388, 389, 390, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 400, + 401, 402, 403, 404, 405, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 33, 34, 35, 36, 37, + -1, -1, -1, -1, -1, 33, -1, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, @@ -2957,313 +2684,596 @@ static const yytype_int16 yycheck[] = 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, -1, -1, 341, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 5, 6, 7, - 8, 9, -1, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, - -1, 399, 400, 401, 402, 403, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 82, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, -1, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, -1, -1, 356, 357, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 375, -1, -1, - -1, 379, 380, -1, -1, -1, -1, -1, 386, 387, - 388, 389, 5, 6, 7, 8, 9, -1, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 82, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, -1, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, -1, -1, 356, 357, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 375, -1, -1, 378, -1, -1, -1, -1, - -1, -1, -1, 386, 387, 388, 389, 5, 6, 7, - 8, 9, -1, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 82, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, -1, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, -1, -1, 356, 357, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 375, -1, -1, - -1, 379, -1, -1, -1, -1, -1, -1, 386, 387, - 388, 389, 5, 6, 7, 8, 9, -1, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 82, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, -1, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, -1, -1, 356, 357, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 375, -1, -1, 378, -1, -1, -1, -1, - -1, -1, -1, 386, 387, 388, 389, 5, 6, 7, - 8, 9, -1, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 82, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, -1, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, -1, -1, 356, 357, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 375, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 385, 386, 387, - 388, 389, 5, 6, 7, 8, 9, -1, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 82, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, -1, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, -1, -1, 356, 357, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 375, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 386, 387, 388, 389, 5, 6, 7, - 8, 9, -1, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 68, 69, 70, 71, 72, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 82, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, - 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 119, 120, 121, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, - 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, - 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, - 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, - 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, - 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, - 338, -1, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, -1, -1, 356, 357, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 375, -1, -1, + 338, 339, -1, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, -1, 357, + 358, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, 386, 387, - 388, 389, 5, 6, 7, 8, 9, -1, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 388, 389, 390, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 400, 401, 402, 403, 404, 405, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, -1, -1, 341 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 386, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 400, 401, 402, 403, 404, + 405, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 33, -1, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, -1, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, -1, 357, 358, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 376, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 387, 388, 389, 390, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 400, 401, + 402, 403, 404, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 33, -1, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + -1, 341, 342, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 386, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 400, 401, 402, 403, 404, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 33, -1, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, -1, -1, 342, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 381, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 400, 401, 402, 403, 404, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 33, -1, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, -1, -1, 342, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 381, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 400, 401, 402, 403, 404, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, + -1, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, -1, -1, 342, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 381, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 400, 401, 402, 403, + 404, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 33, -1, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, -1, -1, + 342, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 5, 6, 7, 8, 9, -1, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + -1, -1, -1, -1, -1, -1, -1, -1, 400, 401, + 402, 403, 404, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 83, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, -1, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, -1, 357, 358, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 376, -1, -1, -1, 380, 381, + -1, -1, -1, -1, -1, 387, 388, 389, 390, 5, + 6, 7, 8, 9, -1, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 83, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, -1, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, 358, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 376, -1, -1, 379, -1, -1, -1, -1, -1, -1, + -1, 387, 388, 389, 390, 5, 6, 7, 8, 9, + -1, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 83, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + -1, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, -1, -1, 357, 358, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 376, -1, -1, -1, + 380, -1, -1, -1, -1, -1, -1, 387, 388, 389, + 390, 5, 6, 7, 8, 9, -1, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 83, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, -1, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, -1, -1, 357, 358, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 376, -1, -1, 379, -1, -1, -1, -1, + -1, -1, -1, 387, 388, 389, 390, 5, 6, 7, + 8, 9, -1, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 20, 21, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, + 68, 69, 70, 71, 72, 73, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 83, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 121, 122, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 132, 133, 134, 135, 136, 137, + 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, + 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, + 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, -1, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, -1, -1, 357, + 358, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 376, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 386, 387, + 388, 389, 390, 5, 6, 7, 8, 9, -1, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 83, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, -1, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, -1, -1, 357, 358, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 376, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 387, 388, 389, 390, 5, + 6, 7, 8, 9, -1, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 83, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, -1, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, -1, + -1, 357, 358, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 387, 388, 389, 390, 5, 6, 7, 8, 9, + -1, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + -1, -1, 342 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -3272,140 +3282,141 @@ static const yytype_uint16 yystos[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, - 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, - 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, - 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, - 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, - 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 338, 341, 385, 399, 400, - 401, 402, 403, 404, 439, 440, 443, 444, 445, 446, - 450, 451, 452, 453, 454, 455, 458, 459, 460, 461, - 462, 464, 469, 470, 471, 511, 512, 513, 375, 375, - 340, 379, 470, 340, 385, 385, 514, 376, 382, 447, - 448, 449, 459, 464, 382, 385, 340, 340, 385, 460, - 464, 393, 466, 467, 0, 512, 340, 463, 81, 340, - 456, 457, 379, 473, 464, 377, 385, 465, 379, 490, - 448, 447, 449, 340, 340, 375, 384, 465, 379, 382, - 385, 442, 340, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 356, 357, 375, 386, 387, - 388, 389, 409, 410, 411, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 462, 464, 468, 465, 376, 382, - 384, 376, 382, 472, 459, 464, 474, 475, 385, 378, - 420, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 377, 385, 22, 23, 24, 26, 27, - 28, 29, 30, 31, 32, 339, 377, 379, 380, 385, - 420, 433, 435, 437, 439, 443, 462, 464, 480, 481, - 482, 483, 491, 492, 493, 494, 497, 498, 501, 502, - 503, 510, 515, 465, 384, 465, 379, 435, 478, 384, - 441, 340, 382, 385, 420, 420, 437, 356, 357, 377, - 381, 376, 376, 382, 338, 435, 375, 420, 382, 394, - 340, 433, 438, 457, 474, 464, 340, 476, 477, 380, - 475, 390, 391, 392, 387, 389, 354, 355, 358, 359, - 393, 394, 360, 361, 397, 396, 395, 362, 364, 363, - 398, 378, 378, 433, 385, 385, 505, 375, 375, 385, - 385, 437, 375, 437, 383, 375, 377, 380, 484, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 384, - 436, 382, 385, 380, 481, 494, 498, 503, 478, 384, - 478, 479, 478, 474, 340, 376, 412, 437, 340, 435, - 420, 380, 476, 465, 382, 385, 420, 420, 420, 422, - 422, 423, 423, 424, 424, 424, 424, 425, 425, 426, - 427, 428, 429, 430, 431, 434, 378, 481, 506, 437, - 385, 437, 383, 504, 340, 516, 517, 491, 435, 435, - 478, 380, 382, 380, 378, 385, 477, 437, 339, 480, - 492, 507, 376, 376, 437, 452, 459, 496, 375, 378, - 382, 485, 380, 478, 383, 375, 496, 508, 509, 487, - 488, 489, 495, 499, 340, 376, 438, 378, 517, 380, - 435, 437, 385, 376, 25, 483, 482, 379, 384, 482, - 486, 490, 376, 376, 437, 486, 487, 491, 500, 478, - 385, 380 + 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 342, 386, 400, 401, + 402, 403, 404, 405, 440, 441, 444, 445, 446, 447, + 451, 452, 453, 454, 455, 456, 459, 460, 461, 462, + 463, 465, 470, 471, 472, 513, 514, 515, 376, 376, + 341, 380, 471, 341, 386, 386, 516, 377, 383, 448, + 449, 450, 460, 465, 383, 386, 341, 341, 386, 461, + 465, 394, 467, 468, 0, 514, 341, 464, 82, 341, + 457, 458, 380, 474, 465, 378, 386, 466, 380, 492, + 449, 448, 450, 341, 341, 376, 385, 466, 380, 383, + 386, 443, 341, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 357, 358, 376, 387, 388, + 389, 390, 410, 411, 412, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 463, 465, 469, 466, 377, 383, + 385, 377, 383, 473, 460, 465, 475, 476, 386, 379, + 421, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 378, 386, 22, 23, 24, 26, 27, + 28, 29, 30, 31, 32, 34, 340, 378, 380, 381, + 386, 421, 434, 436, 438, 440, 444, 463, 465, 481, + 482, 483, 484, 485, 493, 494, 495, 496, 499, 500, + 503, 504, 505, 512, 517, 466, 385, 466, 380, 436, + 479, 385, 442, 341, 383, 386, 421, 421, 438, 357, + 358, 378, 382, 377, 377, 383, 339, 436, 376, 421, + 383, 395, 341, 434, 439, 458, 475, 465, 341, 477, + 478, 381, 476, 391, 392, 393, 388, 390, 355, 356, + 359, 360, 394, 395, 361, 362, 398, 397, 396, 363, + 365, 364, 399, 379, 379, 434, 386, 386, 507, 376, + 376, 386, 386, 438, 376, 438, 384, 386, 376, 378, + 381, 486, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 385, 437, 383, 386, 381, 482, 496, 500, + 505, 479, 385, 479, 480, 479, 475, 341, 377, 413, + 438, 341, 436, 421, 381, 477, 466, 383, 386, 421, + 421, 421, 423, 423, 424, 424, 425, 425, 425, 425, + 426, 426, 427, 428, 429, 430, 431, 432, 435, 379, + 482, 508, 438, 386, 438, 384, 506, 341, 518, 519, + 493, 436, 436, 479, 381, 383, 381, 379, 386, 478, + 438, 340, 481, 494, 509, 377, 377, 438, 453, 460, + 498, 376, 379, 383, 487, 381, 479, 384, 376, 498, + 510, 511, 489, 490, 491, 497, 501, 341, 377, 439, + 379, 519, 381, 436, 438, 386, 377, 25, 485, 483, + 380, 385, 483, 488, 492, 377, 377, 438, 488, 489, + 493, 502, 479, 386, 381 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 408, 409, 410, 410, 410, 410, 410, 410, 410, - 410, 410, 410, 410, 410, 410, 410, 411, 411, 411, - 411, 411, 411, 412, 413, 414, 415, 415, 416, 416, - 417, 417, 418, 419, 419, 419, 420, 420, 420, 420, - 421, 421, 421, 421, 422, 422, 422, 422, 423, 423, - 423, 424, 424, 424, 425, 425, 425, 425, 425, 426, - 426, 426, 427, 427, 428, 428, 429, 429, 430, 430, - 431, 431, 432, 432, 433, 434, 433, 435, 435, 436, - 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, - 437, 437, 438, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 441, 440, 442, 442, 443, 444, 444, 445, - 445, 446, 447, 447, 448, 448, 448, 448, 449, 450, - 450, 450, 450, 450, 451, 451, 451, 451, 451, 452, - 452, 453, 454, 454, 454, 454, 454, 454, 454, 454, - 455, 456, 456, 457, 457, 457, 458, 459, 459, 460, - 460, 460, 460, 460, 460, 460, 461, 461, 461, 461, - 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, - 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, - 461, 461, 461, 461, 461, 462, 463, 463, 464, 464, - 465, 465, 465, 465, 466, 466, 467, 468, 468, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 470, 470, 470, - 472, 471, 473, 471, 474, 474, 475, 475, 476, 476, - 477, 477, 478, 478, 478, 479, 479, 480, 481, 481, - 482, 482, 482, 482, 482, 482, 482, 483, 484, 485, - 483, 486, 486, 488, 487, 489, 487, 490, 490, 491, - 491, 492, 492, 493, 493, 494, 495, 495, 496, 496, - 497, 497, 499, 498, 500, 500, 501, 501, 502, 502, - 504, 503, 505, 503, 506, 503, 507, 507, 508, 508, - 509, 509, 510, 510, 510, 510, 510, 511, 511, 512, - 512, 512, 514, 513, 515, 516, 516, 517, 517 + 0, 409, 410, 411, 411, 411, 411, 411, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 412, 412, 412, + 412, 412, 412, 413, 414, 415, 416, 416, 417, 417, + 418, 418, 419, 420, 420, 420, 421, 421, 421, 421, + 422, 422, 422, 422, 423, 423, 423, 423, 424, 424, + 424, 425, 425, 425, 426, 426, 426, 426, 426, 427, + 427, 427, 428, 428, 429, 429, 430, 430, 431, 431, + 432, 432, 433, 433, 434, 435, 434, 436, 436, 437, + 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, + 438, 438, 439, 440, 440, 440, 440, 440, 440, 440, + 440, 440, 442, 441, 443, 443, 444, 445, 445, 446, + 446, 447, 448, 448, 449, 449, 449, 449, 450, 451, + 451, 451, 451, 451, 452, 452, 452, 452, 452, 453, + 453, 454, 455, 455, 455, 455, 455, 455, 455, 455, + 456, 457, 457, 458, 458, 458, 459, 460, 460, 461, + 461, 461, 461, 461, 461, 461, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, + 462, 462, 462, 462, 462, 463, 464, 464, 465, 465, + 466, 466, 466, 466, 467, 467, 468, 469, 469, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 470, 470, 470, 470, 470, 470, 471, 471, 471, + 473, 472, 474, 472, 475, 475, 476, 476, 477, 477, + 478, 478, 479, 479, 479, 480, 480, 481, 482, 482, + 483, 483, 483, 483, 483, 483, 483, 483, 484, 485, + 486, 487, 485, 488, 488, 490, 489, 491, 489, 492, + 492, 493, 493, 494, 494, 495, 495, 496, 497, 497, + 498, 498, 499, 499, 501, 500, 502, 502, 503, 503, + 504, 504, 506, 505, 507, 505, 508, 505, 509, 509, + 510, 510, 511, 511, 512, 512, 512, 512, 512, 513, + 513, 514, 514, 514, 516, 515, 517, 518, 518, 519, + 519 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -3462,13 +3473,14 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 6, 0, 5, 1, 2, 3, 4, 1, 3, 1, 2, 1, 3, 4, 1, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, - 5, 1, 1, 0, 2, 0, 2, 2, 3, 1, - 2, 1, 2, 1, 2, 5, 3, 1, 1, 4, - 1, 2, 0, 8, 0, 1, 3, 2, 1, 2, - 0, 6, 0, 8, 0, 7, 1, 1, 1, 0, - 2, 3, 2, 2, 2, 3, 2, 1, 2, 1, - 1, 1, 0, 3, 5, 1, 3, 1, 4 + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 0, 0, 5, 1, 1, 0, 2, 0, 2, 2, + 3, 1, 2, 1, 2, 1, 2, 5, 3, 1, + 1, 4, 1, 2, 0, 8, 0, 1, 3, 2, + 1, 2, 0, 6, 0, 8, 0, 7, 1, 1, + 1, 0, 2, 3, 2, 2, 2, 3, 2, 1, + 2, 1, 1, 1, 0, 3, 5, 1, 3, 1, + 4 }; @@ -4155,7 +4167,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string); } -#line 4159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 3: @@ -4163,7 +4175,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4179 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 4: @@ -4172,7 +4184,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 4176 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 5: @@ -4181,7 +4193,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 4185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 6: @@ -4189,7 +4201,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 4193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4205 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 7: @@ -4198,7 +4210,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 4202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 8: @@ -4207,7 +4219,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 4211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4223 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 9: @@ -4216,7 +4228,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 4220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 10: @@ -4225,7 +4237,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 4229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 11: @@ -4234,7 +4246,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 4238 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 12: @@ -4242,7 +4254,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 4246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4258 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 13: @@ -4251,7 +4263,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 4255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4267 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 14: @@ -4260,7 +4272,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 4264 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 15: @@ -4268,7 +4280,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 4272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4284 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 16: @@ -4278,7 +4290,7 @@ yyreduce: if ((yyval.interm.intermTypedNode)->getAsConstantUnion()) (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } -#line 4282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 17: @@ -4286,7 +4298,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4290 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4302 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 18: @@ -4294,7 +4306,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode)); } -#line 4298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4310 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 19: @@ -4302,7 +4314,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4318 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 20: @@ -4310,7 +4322,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string); } -#line 4314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 21: @@ -4320,7 +4332,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 4324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 22: @@ -4330,7 +4342,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 4334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 23: @@ -4339,7 +4351,7 @@ yyreduce: parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]"); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 24: @@ -4348,7 +4360,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 4352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 25: @@ -4356,7 +4368,7 @@ yyreduce: { (yyval.interm) = (yyvsp[0].interm); } -#line 4360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4372 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 26: @@ -4365,7 +4377,7 @@ yyreduce: (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 27: @@ -4374,7 +4386,7 @@ yyreduce: (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 28: @@ -4382,7 +4394,7 @@ yyreduce: { (yyval.interm) = (yyvsp[-1].interm); } -#line 4386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 29: @@ -4390,7 +4402,7 @@ yyreduce: { (yyval.interm) = (yyvsp[0].interm); } -#line 4394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 30: @@ -4402,7 +4414,7 @@ yyreduce: (yyval.interm).function = (yyvsp[-1].interm).function; (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); } -#line 4406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 31: @@ -4414,7 +4426,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 4418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 32: @@ -4422,7 +4434,7 @@ yyreduce: { (yyval.interm) = (yyvsp[-1].interm); } -#line 4426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 33: @@ -4432,7 +4444,7 @@ yyreduce: (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 4436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4448 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 34: @@ -4464,7 +4476,7 @@ yyreduce: (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull); } } -#line 4468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 35: @@ -4474,7 +4486,7 @@ yyreduce: (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 4478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 36: @@ -4485,7 +4497,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 4489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 37: @@ -4494,7 +4506,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 4498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 38: @@ -4503,7 +4515,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 4507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 39: @@ -4524,38 +4536,38 @@ yyreduce: (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } } -#line 4528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 40: #line 528 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } -#line 4534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 41: #line 529 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } -#line 4540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4552 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 42: #line 530 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } -#line 4546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 43: #line 531 "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 4553 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4565 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 44: #line 537 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 45: @@ -4565,7 +4577,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4569 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 46: @@ -4575,7 +4587,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 47: @@ -4586,13 +4598,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 48: #line 557 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 49: @@ -4602,7 +4614,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 50: @@ -4612,13 +4624,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4616 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 51: #line 571 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4622 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4634 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 52: @@ -4629,7 +4641,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 53: @@ -4640,13 +4652,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4644 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4656 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 54: #line 587 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 55: @@ -4656,7 +4668,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4660 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 56: @@ -4666,7 +4678,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 57: @@ -4676,7 +4688,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4692 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 58: @@ -4686,13 +4698,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 59: #line 611 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 60: @@ -4706,7 +4718,7 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 61: @@ -4720,13 +4732,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 62: #line 633 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 63: @@ -4737,13 +4749,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 64: #line 643 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 65: @@ -4754,13 +4766,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 66: #line 653 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 67: @@ -4771,13 +4783,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4775 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4787 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 68: #line 663 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4781 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 69: @@ -4787,13 +4799,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4791 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4803 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 70: #line 672 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4797 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 71: @@ -4803,13 +4815,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4807 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 72: #line 681 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4813 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4825 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 73: @@ -4819,13 +4831,13 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4835 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 74: #line 690 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4841 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 75: @@ -4833,7 +4845,7 @@ yyreduce: { ++parseContext.controlFlowNestingLevel; } -#line 4837 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4849 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 76: @@ -4850,13 +4862,13 @@ yyreduce: (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 4854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4866 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 77: #line 709 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 78: @@ -4874,7 +4886,7 @@ yyreduce: (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } -#line 4878 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 79: @@ -4883,7 +4895,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAssign; } -#line 4887 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4899 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 80: @@ -4892,7 +4904,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpMulAssign; } -#line 4896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 81: @@ -4901,7 +4913,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpDivAssign; } -#line 4905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4917 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 82: @@ -4911,7 +4923,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpModAssign; } -#line 4915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4927 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 83: @@ -4920,7 +4932,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAddAssign; } -#line 4924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4936 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 84: @@ -4929,7 +4941,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpSubAssign; } -#line 4933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 85: @@ -4938,7 +4950,7 @@ yyreduce: parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign; } -#line 4942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4954 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 86: @@ -4947,7 +4959,7 @@ yyreduce: parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign; } -#line 4951 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 87: @@ -4956,7 +4968,7 @@ yyreduce: parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign; } -#line 4960 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 88: @@ -4965,7 +4977,7 @@ yyreduce: parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign; } -#line 4969 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 89: @@ -4974,7 +4986,7 @@ yyreduce: parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign; } -#line 4978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 90: @@ -4982,7 +4994,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4986 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4998 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 91: @@ -4995,7 +5007,7 @@ yyreduce: (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 4999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5011 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 92: @@ -5004,7 +5016,7 @@ yyreduce: parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), ""); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5020 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 93: @@ -5014,7 +5026,7 @@ yyreduce: (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 5018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 94: @@ -5024,7 +5036,7 @@ yyreduce: (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence); (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode; } -#line 5028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 95: @@ -5037,7 +5049,7 @@ yyreduce: parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision); (yyval.interm.intermNode) = 0; } -#line 5041 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 96: @@ -5046,7 +5058,7 @@ yyreduce: parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList); (yyval.interm.intermNode) = 0; } -#line 5050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 97: @@ -5055,7 +5067,7 @@ yyreduce: parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5071 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 98: @@ -5064,7 +5076,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 5068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 99: @@ -5074,7 +5086,7 @@ yyreduce: parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type)); (yyval.interm.intermNode) = 0; } -#line 5078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 100: @@ -5084,7 +5096,7 @@ yyreduce: parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5088 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 101: @@ -5095,13 +5107,13 @@ yyreduce: parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList)); (yyval.interm.intermNode) = 0; } -#line 5099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 102: #line 844 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } -#line 5105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 103: @@ -5115,7 +5127,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[-5].interm.type).loc; (yyval.interm).typeList = (yyvsp[-1].interm.typeList); } -#line 5119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5131 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 104: @@ -5124,7 +5136,7 @@ yyreduce: (yyval.interm.identifierList) = new TIdentifierList; (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 105: @@ -5133,7 +5145,7 @@ yyreduce: (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList); (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5137 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 106: @@ -5142,7 +5154,7 @@ yyreduce: (yyval.interm).function = (yyvsp[-1].interm.function); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 107: @@ -5150,7 +5162,7 @@ yyreduce: { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5154 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 108: @@ -5158,7 +5170,7 @@ yyreduce: { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5162 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 109: @@ -5171,7 +5183,7 @@ yyreduce: else delete (yyvsp[0].interm).param.type; } -#line 5175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5187 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 110: @@ -5193,7 +5205,7 @@ yyreduce: (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param); } } -#line 5197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 111: @@ -5217,7 +5229,7 @@ yyreduce: function = new TFunction((yyvsp[-1].lex).string, type); (yyval.interm.function) = function; } -#line 5221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 112: @@ -5237,7 +5249,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).param = param; } -#line 5241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 113: @@ -5261,7 +5273,7 @@ yyreduce: (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).param = param; } -#line 5265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5277 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 114: @@ -5277,7 +5289,7 @@ yyreduce: parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 5281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 115: @@ -5289,7 +5301,7 @@ yyreduce: parseContext.paramCheckFixStorage((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 5293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5305 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 116: @@ -5304,7 +5316,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 5308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 117: @@ -5316,7 +5328,7 @@ yyreduce: parseContext.paramCheckFixStorage((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 5320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 118: @@ -5327,7 +5339,7 @@ yyreduce: if ((yyvsp[0].interm.type).arraySizes) parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes); } -#line 5331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 119: @@ -5335,7 +5347,7 @@ yyreduce: { (yyval.interm) = (yyvsp[0].interm); } -#line 5339 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 120: @@ -5344,7 +5356,7 @@ yyreduce: (yyval.interm) = (yyvsp[-2].interm); parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type); } -#line 5348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 121: @@ -5353,7 +5365,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 5357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 122: @@ -5363,7 +5375,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 5367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5379 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 123: @@ -5373,7 +5385,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 5377 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5389 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 124: @@ -5383,7 +5395,7 @@ yyreduce: (yyval.interm).intermNode = 0; parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type); } -#line 5387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5399 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 125: @@ -5393,7 +5405,7 @@ yyreduce: (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type)); } -#line 5397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 126: @@ -5403,7 +5415,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 5407 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 127: @@ -5413,7 +5425,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 5417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 128: @@ -5423,7 +5435,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 5427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5439 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 129: @@ -5439,7 +5451,7 @@ yyreduce: parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier); } -#line 5443 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5455 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 130: @@ -5468,7 +5480,7 @@ yyreduce: (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn))) (yyval.interm.type).qualifier.smooth = true; } -#line 5472 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 131: @@ -5479,7 +5491,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.invariant = true; } -#line 5483 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 132: @@ -5491,7 +5503,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.smooth = true; } -#line 5495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 133: @@ -5503,7 +5515,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.flat = true; } -#line 5507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 134: @@ -5519,7 +5531,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nopersp = true; } -#line 5523 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 135: @@ -5533,7 +5545,7 @@ yyreduce: (yyval.interm.type).qualifier.explicitInterp = true; #endif } -#line 5537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5549 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 136: @@ -5548,7 +5560,7 @@ yyreduce: (yyval.interm.type).qualifier.pervertexNV = true; #endif } -#line 5552 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5564 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 137: @@ -5565,7 +5577,7 @@ yyreduce: (yyval.interm.type).qualifier.perPrimitiveNV = true; #endif } -#line 5569 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 138: @@ -5579,7 +5591,7 @@ yyreduce: (yyval.interm.type).qualifier.perViewNV = true; #endif } -#line 5583 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 139: @@ -5593,7 +5605,7 @@ yyreduce: (yyval.interm.type).qualifier.perTaskNV = true; #endif } -#line 5597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 140: @@ -5601,7 +5613,7 @@ yyreduce: { (yyval.interm.type) = (yyvsp[-1].interm.type); } -#line 5605 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 141: @@ -5609,7 +5621,7 @@ yyreduce: { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 142: @@ -5619,7 +5631,7 @@ yyreduce: (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers); parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false); } -#line 5623 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5635 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 143: @@ -5628,7 +5640,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string); } -#line 5632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5644 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 144: @@ -5637,7 +5649,7 @@ yyreduce: (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 5641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 145: @@ -5647,7 +5659,7 @@ yyreduce: TString strShared("shared"); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared); } -#line 5651 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 146: @@ -5658,7 +5670,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.noContraction = true; } -#line 5662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5674 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 147: @@ -5666,7 +5678,7 @@ yyreduce: { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 148: @@ -5679,7 +5691,7 @@ 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 5683 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5695 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 149: @@ -5687,7 +5699,7 @@ yyreduce: { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 150: @@ -5695,7 +5707,7 @@ yyreduce: { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 151: @@ -5704,7 +5716,7 @@ yyreduce: parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 152: @@ -5713,7 +5725,7 @@ yyreduce: // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 153: @@ -5722,7 +5734,7 @@ yyreduce: // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 154: @@ -5731,7 +5743,7 @@ yyreduce: // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5735 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 155: @@ -5739,7 +5751,7 @@ yyreduce: { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5743 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5755 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 156: @@ -5748,7 +5760,7 @@ yyreduce: (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 5752 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 157: @@ -5765,7 +5777,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 5769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5781 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 158: @@ -5784,7 +5796,7 @@ yyreduce: else (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 5788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 159: @@ -5794,7 +5806,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqInOut; } -#line 5798 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 160: @@ -5805,7 +5817,7 @@ yyreduce: // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqIn; } -#line 5809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5821 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 161: @@ -5816,7 +5828,7 @@ yyreduce: // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqOut; } -#line 5820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5832 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 162: @@ -5828,7 +5840,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.centroid = true; } -#line 5832 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5844 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 163: @@ -5839,7 +5851,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.patch = true; } -#line 5843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 164: @@ -5849,7 +5861,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.sample = true; } -#line 5853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 165: @@ -5859,7 +5871,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqUniform; } -#line 5863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 166: @@ -5869,7 +5881,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqBuffer; } -#line 5873 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 167: @@ -5884,7 +5896,7 @@ yyreduce: (yyval.interm.type).qualifier.storage = EvqHitAttrNV; #endif } -#line 5888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 168: @@ -5899,7 +5911,7 @@ yyreduce: (yyval.interm.type).qualifier.storage = EvqPayloadNV; #endif } -#line 5903 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 169: @@ -5914,7 +5926,7 @@ yyreduce: (yyval.interm.type).qualifier.storage = EvqPayloadInNV; #endif } -#line 5918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 170: @@ -5929,7 +5941,7 @@ yyreduce: (yyval.interm.type).qualifier.storage = EvqCallableDataNV; #endif } -#line 5933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 171: @@ -5943,7 +5955,7 @@ yyreduce: (yyval.interm.type).qualifier.storage = EvqCallableDataInNV; #endif } -#line 5947 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 172: @@ -5960,7 +5972,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqShared; } -#line 5964 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5976 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 173: @@ -5969,7 +5981,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.coherent = true; } -#line 5973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 174: @@ -5979,7 +5991,7 @@ yyreduce: parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent"); (yyval.interm.type).qualifier.devicecoherent = true; } -#line 5983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 175: @@ -5989,7 +6001,7 @@ yyreduce: parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent"); (yyval.interm.type).qualifier.queuefamilycoherent = true; } -#line 5993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 176: @@ -5999,7 +6011,7 @@ yyreduce: parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent"); (yyval.interm.type).qualifier.workgroupcoherent = true; } -#line 6003 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 177: @@ -6009,7 +6021,7 @@ yyreduce: parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent"); (yyval.interm.type).qualifier.subgroupcoherent = true; } -#line 6013 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6025 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 178: @@ -6019,7 +6031,7 @@ yyreduce: parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate"); (yyval.interm.type).qualifier.nonprivate = true; } -#line 6023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6035 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 179: @@ -6028,7 +6040,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.volatil = true; } -#line 6032 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 180: @@ -6037,7 +6049,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.restrict = true; } -#line 6041 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 181: @@ -6046,7 +6058,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.readonly = true; } -#line 6050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 182: @@ -6055,7 +6067,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.writeonly = true; } -#line 6059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6071 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 183: @@ -6066,7 +6078,7 @@ yyreduce: parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[0].lex).loc); } -#line 6070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6082 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 184: @@ -6077,7 +6089,7 @@ yyreduce: parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[-3].lex).loc); } -#line 6081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 185: @@ -6086,7 +6098,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nonUniform = true; } -#line 6090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6102 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 186: @@ -6094,7 +6106,7 @@ yyreduce: { // TODO } -#line 6098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6110 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 187: @@ -6104,7 +6116,7 @@ yyreduce: // 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 6108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 188: @@ -6114,7 +6126,7 @@ yyreduce: (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters); } -#line 6118 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 189: @@ -6126,7 +6138,7 @@ yyreduce: (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters); (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes; } -#line 6130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6142 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 190: @@ -6136,7 +6148,7 @@ yyreduce: (yyval.interm).arraySizes = new TArraySizes; (yyval.interm).arraySizes->addInnerSize(); } -#line 6140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6152 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 191: @@ -6149,7 +6161,7 @@ yyreduce: parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6153 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6165 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 192: @@ -6158,7 +6170,7 @@ yyreduce: (yyval.interm) = (yyvsp[-2].interm); (yyval.interm).arraySizes->addInnerSize(); } -#line 6162 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 193: @@ -6170,7 +6182,7 @@ yyreduce: parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 194: @@ -6178,7 +6190,7 @@ yyreduce: { (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters); } -#line 6182 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 195: @@ -6186,7 +6198,7 @@ yyreduce: { (yyval.interm.typeParameters) = 0; } -#line 6190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 196: @@ -6194,7 +6206,7 @@ yyreduce: { (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters); } -#line 6198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 197: @@ -6206,7 +6218,7 @@ yyreduce: parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 198: @@ -6218,7 +6230,7 @@ yyreduce: parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 199: @@ -6227,7 +6239,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtVoid; } -#line 6231 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 200: @@ -6236,7 +6248,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 6240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 201: @@ -6246,7 +6258,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 6250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6262 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 202: @@ -6256,7 +6268,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; } -#line 6260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 203: @@ -6266,7 +6278,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 6270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 204: @@ -6276,7 +6288,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 6280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 205: @@ -6285,7 +6297,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 6289 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6301 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 206: @@ -6295,7 +6307,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 6299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 207: @@ -6305,7 +6317,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; } -#line 6309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6321 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 208: @@ -6315,7 +6327,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; } -#line 6319 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 209: @@ -6325,7 +6337,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; } -#line 6329 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6341 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 210: @@ -6335,7 +6347,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; } -#line 6339 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 211: @@ -6345,7 +6357,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 6349 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 212: @@ -6355,7 +6367,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 6359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6371 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 213: @@ -6365,7 +6377,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; } -#line 6369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6381 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 214: @@ -6375,7 +6387,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; } -#line 6379 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 215: @@ -6384,7 +6396,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; } -#line 6388 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 216: @@ -6394,7 +6406,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 6398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6410 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 217: @@ -6404,7 +6416,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 6408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6420 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 218: @@ -6414,7 +6426,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 6418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6430 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 219: @@ -6425,7 +6437,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 6429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 220: @@ -6436,7 +6448,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 6440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6452 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 221: @@ -6447,7 +6459,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 6451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 222: @@ -6458,7 +6470,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(2); } -#line 6462 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 223: @@ -6469,7 +6481,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(3); } -#line 6473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 224: @@ -6480,7 +6492,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(4); } -#line 6484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6496 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 225: @@ -6491,7 +6503,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 6495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 226: @@ -6502,7 +6514,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 6506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 227: @@ -6513,7 +6525,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 6517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 228: @@ -6524,7 +6536,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 6528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 229: @@ -6535,7 +6547,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 6539 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 230: @@ -6546,7 +6558,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 6550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6562 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 231: @@ -6556,7 +6568,7 @@ yyreduce: (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(2); } -#line 6560 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 232: @@ -6566,7 +6578,7 @@ yyreduce: (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(3); } -#line 6570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 233: @@ -6576,7 +6588,7 @@ yyreduce: (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(4); } -#line 6580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 234: @@ -6586,7 +6598,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 6590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 235: @@ -6596,7 +6608,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 6600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 236: @@ -6606,7 +6618,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 6610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6622 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 237: @@ -6617,7 +6629,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(2); } -#line 6621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 238: @@ -6628,7 +6640,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(3); } -#line 6632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6644 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 239: @@ -6639,7 +6651,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(4); } -#line 6643 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6655 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 240: @@ -6650,7 +6662,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(2); } -#line 6654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 241: @@ -6661,7 +6673,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(3); } -#line 6665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6677 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 242: @@ -6672,7 +6684,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(4); } -#line 6676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 243: @@ -6683,7 +6695,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 6687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 244: @@ -6694,7 +6706,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 6698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 245: @@ -6705,7 +6717,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 6709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6721 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 246: @@ -6716,7 +6728,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(2); } -#line 6720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 247: @@ -6727,7 +6739,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(3); } -#line 6731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6743 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 248: @@ -6738,7 +6750,7 @@ yyreduce: (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(4); } -#line 6742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 249: @@ -6749,7 +6761,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 6753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6765 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 250: @@ -6760,7 +6772,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 6764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 251: @@ -6771,7 +6783,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 6775 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6787 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 252: @@ -6782,7 +6794,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(2); } -#line 6786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6798 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 253: @@ -6793,7 +6805,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(3); } -#line 6797 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 254: @@ -6804,7 +6816,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(4); } -#line 6808 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 255: @@ -6815,7 +6827,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(2); } -#line 6819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6831 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 256: @@ -6826,7 +6838,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(3); } -#line 6830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 257: @@ -6837,7 +6849,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(4); } -#line 6841 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 258: @@ -6848,7 +6860,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 6852 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 259: @@ -6859,7 +6871,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 6863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 260: @@ -6870,7 +6882,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 6874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 261: @@ -6881,7 +6893,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(2); } -#line 6885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 262: @@ -6892,7 +6904,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(3); } -#line 6896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 263: @@ -6903,7 +6915,7 @@ yyreduce: (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(4); } -#line 6907 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 264: @@ -6913,7 +6925,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6917 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 265: @@ -6923,7 +6935,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6927 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6939 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 266: @@ -6933,7 +6945,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6937 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6949 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 267: @@ -6943,7 +6955,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6947 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 268: @@ -6953,7 +6965,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 6957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6969 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 269: @@ -6963,7 +6975,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 6967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 270: @@ -6973,7 +6985,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 6977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6989 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 271: @@ -6983,7 +6995,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6987 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6999 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 272: @@ -6993,7 +7005,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 6997 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7009 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 273: @@ -7003,7 +7015,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 7007 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7019 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 274: @@ -7013,7 +7025,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 7017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7029 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 275: @@ -7023,7 +7035,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7027 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 276: @@ -7034,7 +7046,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 277: @@ -7045,7 +7057,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7061 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 278: @@ -7056,7 +7068,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7072 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 279: @@ -7067,7 +7079,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7071 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 280: @@ -7078,7 +7090,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 7082 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7094 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 281: @@ -7089,7 +7101,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 7093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 282: @@ -7100,7 +7112,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 7104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 283: @@ -7111,7 +7123,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7127 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 284: @@ -7122,7 +7134,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 7126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 285: @@ -7133,7 +7145,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 7137 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 286: @@ -7144,7 +7156,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 7148 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 287: @@ -7155,7 +7167,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 288: @@ -7166,7 +7178,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7182 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 289: @@ -7177,7 +7189,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 290: @@ -7188,7 +7200,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7192 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7204 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 291: @@ -7199,7 +7211,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7215 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 292: @@ -7210,7 +7222,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 3); } -#line 7214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 293: @@ -7221,7 +7233,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 4); } -#line 7225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7237 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 294: @@ -7232,7 +7244,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 2); } -#line 7236 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 295: @@ -7243,7 +7255,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7247 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 296: @@ -7254,7 +7266,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 4); } -#line 7258 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 297: @@ -7265,7 +7277,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 2); } -#line 7269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 298: @@ -7276,7 +7288,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 3); } -#line 7280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 299: @@ -7287,7 +7299,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 300: @@ -7298,7 +7310,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7302 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 301: @@ -7309,7 +7321,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 302: @@ -7320,7 +7332,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 303: @@ -7331,7 +7343,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7347 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 304: @@ -7342,7 +7354,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 7346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 305: @@ -7353,7 +7365,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 7357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 306: @@ -7364,7 +7376,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 7368 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 307: @@ -7375,7 +7387,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7379 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 308: @@ -7386,7 +7398,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 7390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7402 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 309: @@ -7397,7 +7409,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 7401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7413 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 310: @@ -7408,7 +7420,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 7412 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 311: @@ -7419,7 +7431,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 312: @@ -7430,7 +7442,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 313: @@ -7441,7 +7453,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 314: @@ -7452,7 +7464,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 315: @@ -7463,7 +7475,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 316: @@ -7474,7 +7486,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 7478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 317: @@ -7485,7 +7497,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 7489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 318: @@ -7496,7 +7508,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 7500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7512 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 319: @@ -7507,7 +7519,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7523 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 320: @@ -7518,7 +7530,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 7522 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 321: @@ -7529,7 +7541,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 7533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7545 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 322: @@ -7540,7 +7552,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 7544 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7556 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 323: @@ -7551,7 +7563,7 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 324: @@ -7562,7 +7574,7 @@ yyreduce: (yyval.interm.type).basicType = EbtAccStructNV; #endif } -#line 7566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 325: @@ -7572,7 +7584,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAtomicUint; } -#line 7576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 326: @@ -7582,7 +7594,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D); } -#line 7586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7598 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 327: @@ -7592,7 +7604,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); } -#line 7596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 328: @@ -7602,7 +7614,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd3D); } -#line 7606 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 329: @@ -7612,7 +7624,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube); } -#line 7616 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 330: @@ -7622,7 +7634,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true); } -#line 7626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7638 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 331: @@ -7632,7 +7644,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true); } -#line 7636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7648 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 332: @@ -7642,7 +7654,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true); } -#line 7646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 333: @@ -7652,7 +7664,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true); } -#line 7656 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 334: @@ -7662,7 +7674,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true); } -#line 7666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 335: @@ -7672,7 +7684,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true); } -#line 7676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 336: @@ -7682,7 +7694,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true); } -#line 7686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 337: @@ -7692,7 +7704,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true); } -#line 7696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 338: @@ -7702,7 +7714,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true); } -#line 7706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 339: @@ -7715,7 +7727,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd1D); #endif } -#line 7719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 340: @@ -7728,7 +7740,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd2D); #endif } -#line 7732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 341: @@ -7741,7 +7753,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd3D); #endif } -#line 7745 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 342: @@ -7754,7 +7766,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, EsdCube); #endif } -#line 7758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 343: @@ -7767,7 +7779,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true); #endif } -#line 7771 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 344: @@ -7780,7 +7792,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true); #endif } -#line 7784 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 345: @@ -7793,7 +7805,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true); #endif } -#line 7797 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 346: @@ -7806,7 +7818,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true); #endif } -#line 7810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7822 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 347: @@ -7819,7 +7831,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true); #endif } -#line 7823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7835 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 348: @@ -7832,7 +7844,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true); #endif } -#line 7836 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 349: @@ -7845,7 +7857,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true); #endif } -#line 7849 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7861 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 350: @@ -7858,7 +7870,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true); #endif } -#line 7862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 351: @@ -7871,7 +7883,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true); #endif } -#line 7875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7887 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 352: @@ -7881,7 +7893,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D); } -#line 7885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 353: @@ -7891,7 +7903,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D); } -#line 7895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7907 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 354: @@ -7901,7 +7913,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd3D); } -#line 7905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7917 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 355: @@ -7911,7 +7923,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube); } -#line 7915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7927 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 356: @@ -7921,7 +7933,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D, true); } -#line 7925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7937 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 357: @@ -7931,7 +7943,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true); } -#line 7935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7947 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 358: @@ -7941,7 +7953,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube, true); } -#line 7945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 359: @@ -7951,7 +7963,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D); } -#line 7955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 360: @@ -7961,7 +7973,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D); } -#line 7965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 361: @@ -7971,7 +7983,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd3D); } -#line 7975 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7987 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 362: @@ -7981,7 +7993,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube); } -#line 7985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7997 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 363: @@ -7991,7 +8003,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D, true); } -#line 7995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8007 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 364: @@ -8001,7 +8013,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true); } -#line 8005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 365: @@ -8011,7 +8023,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube, true); } -#line 8015 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8027 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 366: @@ -8021,7 +8033,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect); } -#line 8025 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8037 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 367: @@ -8031,7 +8043,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true); } -#line 8035 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 368: @@ -8044,7 +8056,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, EsdRect); #endif } -#line 8048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 369: @@ -8057,7 +8069,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true); #endif } -#line 8061 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 370: @@ -8067,7 +8079,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdRect); } -#line 8071 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 371: @@ -8077,7 +8089,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdRect); } -#line 8081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 372: @@ -8087,7 +8099,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer); } -#line 8091 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 373: @@ -8100,7 +8112,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer); #endif } -#line 8104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 374: @@ -8110,7 +8122,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdBuffer); } -#line 8114 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 375: @@ -8120,7 +8132,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdBuffer); } -#line 8124 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 376: @@ -8130,7 +8142,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true); } -#line 8134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 377: @@ -8143,7 +8155,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true); #endif } -#line 8147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 378: @@ -8153,7 +8165,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true); } -#line 8157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8169 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 379: @@ -8163,7 +8175,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true); } -#line 8167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8179 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 380: @@ -8173,7 +8185,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true); } -#line 8177 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8189 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 381: @@ -8186,7 +8198,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true); #endif } -#line 8190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 382: @@ -8196,7 +8208,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true); } -#line 8200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8212 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 383: @@ -8206,7 +8218,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true); } -#line 8210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 384: @@ -8216,7 +8228,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(false); } -#line 8220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 385: @@ -8226,7 +8238,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(true); } -#line 8230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 386: @@ -8236,7 +8248,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D); } -#line 8240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 387: @@ -8249,7 +8261,7 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D); #endif } -#line 8253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 388: @@ -8259,7 +8271,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D); } -#line 8263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 389: @@ -8272,7 +8284,7 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D); #endif } -#line 8276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 390: @@ -8282,7 +8294,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D); } -#line 8286 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 391: @@ -8295,7 +8307,7 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D); #endif } -#line 8299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 392: @@ -8305,7 +8317,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube); } -#line 8309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8321 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 393: @@ -8318,7 +8330,7 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube); #endif } -#line 8322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 394: @@ -8328,7 +8340,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true); } -#line 8332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 395: @@ -8341,7 +8353,7 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true); #endif } -#line 8345 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 396: @@ -8351,7 +8363,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true); } -#line 8355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 397: @@ -8364,7 +8376,7 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true); #endif } -#line 8368 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 398: @@ -8374,7 +8386,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true); } -#line 8378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 399: @@ -8387,7 +8399,7 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true); #endif } -#line 8391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 400: @@ -8397,7 +8409,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D); } -#line 8401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8413 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 401: @@ -8407,7 +8419,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D); } -#line 8411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 402: @@ -8417,7 +8429,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D); } -#line 8421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8433 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 403: @@ -8427,7 +8439,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube); } -#line 8431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8443 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 404: @@ -8437,7 +8449,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true); } -#line 8441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8453 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 405: @@ -8447,7 +8459,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true); } -#line 8451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 406: @@ -8457,7 +8469,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true); } -#line 8461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 407: @@ -8467,7 +8479,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D); } -#line 8471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8483 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 408: @@ -8477,7 +8489,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D); } -#line 8481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8493 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 409: @@ -8487,7 +8499,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D); } -#line 8491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 410: @@ -8497,7 +8509,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube); } -#line 8501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 411: @@ -8507,7 +8519,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true); } -#line 8511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8523 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 412: @@ -8517,7 +8529,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true); } -#line 8521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 413: @@ -8527,7 +8539,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true); } -#line 8531 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8543 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 414: @@ -8537,7 +8549,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect); } -#line 8541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8553 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 415: @@ -8550,7 +8562,7 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect); #endif } -#line 8554 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 416: @@ -8560,7 +8572,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect); } -#line 8564 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8576 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 417: @@ -8570,7 +8582,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect); } -#line 8574 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 418: @@ -8580,7 +8592,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer); } -#line 8584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 419: @@ -8593,7 +8605,7 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer); #endif } -#line 8597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 420: @@ -8603,7 +8615,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer); } -#line 8607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 421: @@ -8613,7 +8625,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer); } -#line 8617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 422: @@ -8623,7 +8635,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true); } -#line 8627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 423: @@ -8636,7 +8648,7 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true); #endif } -#line 8640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 424: @@ -8646,7 +8658,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true); } -#line 8650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 425: @@ -8656,7 +8668,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true); } -#line 8660 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 426: @@ -8666,7 +8678,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true); } -#line 8670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8682 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 427: @@ -8679,7 +8691,7 @@ yyreduce: (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true); #endif } -#line 8683 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8695 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 428: @@ -8689,7 +8701,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true); } -#line 8693 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8705 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 429: @@ -8699,7 +8711,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true); } -#line 8703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8715 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 430: @@ -8709,7 +8721,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D); } -#line 8713 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8725 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 431: @@ -8722,7 +8734,7 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D); #endif } -#line 8726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 432: @@ -8732,7 +8744,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D); } -#line 8736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 433: @@ -8742,7 +8754,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D); } -#line 8746 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 434: @@ -8752,7 +8764,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D); } -#line 8756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8768 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 435: @@ -8765,7 +8777,7 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D); #endif } -#line 8769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8781 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 436: @@ -8775,7 +8787,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D); } -#line 8779 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8791 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 437: @@ -8785,7 +8797,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D); } -#line 8789 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 438: @@ -8795,7 +8807,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D); } -#line 8799 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8811 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 439: @@ -8808,7 +8820,7 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D); #endif } -#line 8812 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 440: @@ -8818,7 +8830,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd3D); } -#line 8822 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 441: @@ -8828,7 +8840,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd3D); } -#line 8832 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8844 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 442: @@ -8838,7 +8850,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect); } -#line 8842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 443: @@ -8851,7 +8863,7 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect); #endif } -#line 8855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8867 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 444: @@ -8861,7 +8873,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdRect); } -#line 8865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 445: @@ -8871,7 +8883,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdRect); } -#line 8875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8887 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 446: @@ -8881,7 +8893,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube); } -#line 8885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 447: @@ -8894,7 +8906,7 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube); #endif } -#line 8898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8910 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 448: @@ -8904,7 +8916,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube); } -#line 8908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 449: @@ -8914,7 +8926,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube); } -#line 8918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 450: @@ -8924,7 +8936,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer); } -#line 8928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 451: @@ -8937,7 +8949,7 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer); #endif } -#line 8941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8953 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 452: @@ -8947,7 +8959,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer); } -#line 8951 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 453: @@ -8957,7 +8969,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer); } -#line 8961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 454: @@ -8967,7 +8979,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true); } -#line 8971 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 455: @@ -8980,7 +8992,7 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true); #endif } -#line 8984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 456: @@ -8990,7 +9002,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true); } -#line 8994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 457: @@ -9000,7 +9012,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true); } -#line 9004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 458: @@ -9010,7 +9022,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true); } -#line 9014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9026 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 459: @@ -9023,7 +9035,7 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true); #endif } -#line 9027 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 460: @@ -9033,7 +9045,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true); } -#line 9037 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 461: @@ -9043,7 +9055,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true); } -#line 9047 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 462: @@ -9053,7 +9065,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true); } -#line 9057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9069 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 463: @@ -9066,7 +9078,7 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true); #endif } -#line 9070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9082 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 464: @@ -9076,7 +9088,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true); } -#line 9080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9092 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 465: @@ -9086,7 +9098,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true); } -#line 9090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9102 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 466: @@ -9096,7 +9108,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true); } -#line 9100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 467: @@ -9109,7 +9121,7 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true); #endif } -#line 9113 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9125 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 468: @@ -9119,7 +9131,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true); } -#line 9123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 469: @@ -9129,7 +9141,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true); } -#line 9133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 470: @@ -9139,7 +9151,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true); } -#line 9143 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 471: @@ -9152,7 +9164,7 @@ yyreduce: (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true); #endif } -#line 9156 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9168 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 472: @@ -9162,7 +9174,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true); } -#line 9166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 473: @@ -9172,7 +9184,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true); } -#line 9176 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 474: @@ -9183,7 +9195,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.external = true; } -#line 9187 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 475: @@ -9194,7 +9206,7 @@ yyreduce: (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.yuv = true; } -#line 9198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9210 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 476: @@ -9205,7 +9217,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat); } -#line 9209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 477: @@ -9216,7 +9228,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat, true); } -#line 9220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 478: @@ -9230,7 +9242,7 @@ yyreduce: (yyval.interm.type).sampler.setSubpass(EbtFloat16); #endif } -#line 9234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 479: @@ -9244,7 +9256,7 @@ yyreduce: (yyval.interm.type).sampler.setSubpass(EbtFloat16, true); #endif } -#line 9248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 480: @@ -9255,7 +9267,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt); } -#line 9259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 481: @@ -9266,7 +9278,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt, true); } -#line 9270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9282 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 482: @@ -9277,7 +9289,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint); } -#line 9281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 483: @@ -9288,7 +9300,7 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint, true); } -#line 9292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 484: @@ -9299,7 +9311,7 @@ yyreduce: (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).coopmat = true; } -#line 9303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9315 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 485: @@ -9309,7 +9321,7 @@ yyreduce: (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type)); } -#line 9313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 486: @@ -9327,7 +9339,7 @@ yyreduce: } else parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), ""); } -#line 9331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 487: @@ -9337,7 +9349,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh); } -#line 9341 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 488: @@ -9347,7 +9359,7 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium); } -#line 9351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9363 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 489: @@ -9357,13 +9369,13 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow); } -#line 9361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9373 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 490: #line 3262 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } -#line 9367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9379 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 491: @@ -9379,13 +9391,13 @@ yyreduce: (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 9383 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 492: #line 3273 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } -#line 9389 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 493: @@ -9397,7 +9409,7 @@ yyreduce: (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 9401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9413 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 494: @@ -9405,7 +9417,7 @@ yyreduce: { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 9409 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 495: @@ -9420,7 +9432,7 @@ yyreduce: (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 9424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 496: @@ -9447,7 +9459,7 @@ yyreduce: (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 9451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 497: @@ -9476,7 +9488,7 @@ yyreduce: (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 9480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9492 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 498: @@ -9485,7 +9497,7 @@ yyreduce: (yyval.interm.typeList) = new TTypeList; (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 9489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 499: @@ -9493,7 +9505,7 @@ yyreduce: { (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 9497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9509 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 500: @@ -9503,7 +9515,7 @@ yyreduce: (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc; (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string); } -#line 9507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 501: @@ -9516,7 +9528,7 @@ yyreduce: (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string); (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes); } -#line 9520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9532 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 502: @@ -9524,7 +9536,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 9528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 503: @@ -9535,7 +9547,7 @@ yyreduce: parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); } -#line 9539 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 504: @@ -9546,7 +9558,7 @@ yyreduce: parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 9550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9562 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 505: @@ -9554,7 +9566,7 @@ yyreduce: { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc()); } -#line 9558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 506: @@ -9562,173 +9574,189 @@ yyreduce: { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); } -#line 9566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 507: #line 3401 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 508: #line 3405 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 509: #line 3406 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 510: #line 3412 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 511: #line 3413 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 512: #line 3414 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 513: #line 3415 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 514: #line 3416 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 515: #line 3417 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 516: #line 3418 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9638 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 517: -#line 3422 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = 0; } -#line 9632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 3419 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 9644 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 518: #line 3423 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { - parseContext.symbolTable.push(); - ++parseContext.statementNestingLevel; + parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "demote"); + parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote"); + (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDemote, (yyvsp[-1].lex).loc); } -#line 9641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 519: -#line 3427 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3431 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { (yyval.interm.intermNode) = 0; } +#line 9660 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 520: +#line 3432 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + parseContext.symbolTable.push(); + ++parseContext.statementNestingLevel; + } +#line 9669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 521: +#line 3436 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; } -#line 9650 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 520: -#line 3431 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 522: +#line 3440 "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 9660 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 521: -#line 3439 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9666 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 522: -#line 3440 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 523: -#line 3444 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - ++parseContext.controlFlowNestingLevel; - } -#line 9680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 3448 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 9694 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 524: -#line 3447 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3449 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 9700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 525: +#line 3453 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + ++parseContext.controlFlowNestingLevel; + } +#line 9708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 526: +#line 3456 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 525: -#line 3451 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 527: +#line 3460 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 9699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 526: -#line 3456 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 528: +#line 3465 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 527: -#line 3465 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 529: +#line 3474 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; } -#line 9718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9746 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 528: -#line 3468 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 530: +#line 3477 "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 9728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 529: -#line 3476 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 531: +#line 3485 "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 || @@ -9737,11 +9765,11 @@ yyreduce: (yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case } } -#line 9741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 530: -#line 3484 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 532: +#line 3493 "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)) { @@ -9750,76 +9778,76 @@ yyreduce: } else (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 9754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 531: -#line 3495 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = 0; } -#line 9760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 532: -#line 3496 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } -#line 9766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9782 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 533: -#line 3500 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); - } -#line 9774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 3504 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { (yyval.interm.intermNode) = 0; } +#line 9788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 534: -#line 3503 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); - (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); - } -#line 9783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 3505 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } +#line 9794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 535: #line 3509 "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); + (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9802 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 536: -#line 3516 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3512 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); + (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); + } +#line 9811 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 537: +#line 3518 "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 9820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 538: +#line 3525 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode); } -#line 9801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 537: -#line 3520 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 539: +#line 3529 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode); (yyval.interm.nodePair).node2 = 0; } -#line 9810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 538: -#line 3528 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 540: +#line 3537 "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 9819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 539: -#line 3532 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 541: +#line 3541 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type)); @@ -9830,28 +9858,28 @@ yyreduce: else (yyval.interm.intermTypedNode) = 0; } -#line 9834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 540: -#line 3545 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); - } -#line 9842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 541: -#line 3548 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); - (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); - } -#line 9851 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 542: #line 3554 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); + } +#line 9870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 543: +#line 3557 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); + (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); + } +#line 9879 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 544: +#line 3563 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // start new switch sequence on the switch stack ++parseContext.controlFlowNestingLevel; @@ -9860,11 +9888,11 @@ yyreduce: parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.symbolTable.push(); } -#line 9864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9892 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 543: -#line 3562 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 545: +#line 3571 "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(); @@ -9874,27 +9902,27 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 9878 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 544: -#line 3574 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - (yyval.interm.intermNode) = 0; - } -#line 9886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 545: -#line 3577 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); - } -#line 9894 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 546: #line 3583 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.intermNode) = 0; + } +#line 9914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 547: +#line 3586 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); + } +#line 9922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 548: +#line 3592 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -9907,11 +9935,11 @@ yyreduce: (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc); } } -#line 9911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9939 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 547: -#line 3595 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 549: +#line 3604 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -9921,28 +9949,28 @@ yyreduce: else (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); } -#line 9925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 548: -#line 3607 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); - } -#line 9933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 549: -#line 3610 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); - (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); - } -#line 9942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9953 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 550: #line 3616 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); + } +#line 9961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 551: +#line 3619 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); + (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); + } +#line 9970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 552: +#line 3625 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", ""); @@ -9951,11 +9979,11 @@ yyreduce: ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 9955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 551: -#line 3624 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 553: +#line 3633 "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); @@ -9963,21 +9991,21 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 9967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 552: -#line 3631 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 554: +#line 3640 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 9977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 553: -#line 3636 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 555: +#line 3645 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); @@ -9989,22 +10017,22 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 9993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 554: -#line 3647 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 556: +#line 3656 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10032 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 555: -#line 3653 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 557: +#line 3662 "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); @@ -10017,81 +10045,81 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 556: -#line 3668 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); - } -#line 10029 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 557: -#line 3671 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); - } -#line 10037 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 558: #line 3677 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { - (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); + (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 559: #line 3680 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { - (yyval.interm.intermTypedNode) = 0; + (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 560: #line 3686 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { - (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); - (yyval.interm.nodePair).node2 = 0; + (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 561: -#line 3690 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3689 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.intermTypedNode) = 0; + } +#line 10081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 562: +#line 3695 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); + (yyval.interm.nodePair).node2 = 0; + } +#line 10090 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 563: +#line 3699 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode); } -#line 10071 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 562: -#line 3697 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 564: +#line 3706 "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 10081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 563: -#line 3702 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 565: +#line 3711 "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 10091 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 564: -#line 3707 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 566: +#line 3716 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc); if (parseContext.currentFunctionType->getBasicType() != EbtVoid) @@ -10099,83 +10127,83 @@ yyreduce: if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 10103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10131 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 565: -#line 3714 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 567: +#line 3723 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode)); } -#line 10111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 566: -#line 3717 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 568: +#line 3726 "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 10120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10148 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 567: -#line 3726 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 569: +#line 3735 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } -#line 10129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 568: -#line 3730 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 570: +#line 3739 "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 10140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 569: -#line 3739 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); - } -#line 10148 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 570: -#line 3742 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); - } -#line 10156 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10168 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 571: -#line 3745 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3748 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); + } +#line 10176 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 572: +#line 3751 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); + } +#line 10184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 573: +#line 3754 "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 10166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 572: -#line 3753 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 574: +#line 3762 "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 10175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 573: -#line 3757 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 575: +#line 3766 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) @@ -10191,52 +10219,52 @@ yyreduce: (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug); (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable); } -#line 10195 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 574: -#line 3775 "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 10204 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ - break; - - case 575: -#line 3781 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { - (yyval.interm.attributes) = (yyvsp[0].interm.attributes); - } -#line 10212 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10223 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 576: #line 3784 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { - (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); + (yyval.interm.attributes) = (yyvsp[-2].interm.attributes); + parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute"); } -#line 10220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 577: -#line 3789 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3790 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { - (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); + (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 10228 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 578: -#line 3792 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3793 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); + } +#line 10248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 579: +#line 3798 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); + } +#line 10256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 580: +#line 3801 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 10236 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10264 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; -#line 10240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -10464,5 +10492,5 @@ yyreturn: #endif return yyresult; } -#line 3796 "MachineIndependent/glslang.y" /* yacc.c:1906 */ +#line 3805 "MachineIndependent/glslang.y" /* yacc.c:1906 */ diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h index a467db64..3e67dd0d 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp.h +++ b/glslang/MachineIndependent/glslang_tab.cpp.h @@ -76,380 +76,381 @@ extern int yydebug; CASE = 286, DEFAULT = 287, SUBROUTINE = 288, - BVEC2 = 289, - BVEC3 = 290, - BVEC4 = 291, - IVEC2 = 292, - IVEC3 = 293, - IVEC4 = 294, - UVEC2 = 295, - UVEC3 = 296, - UVEC4 = 297, - I64VEC2 = 298, - I64VEC3 = 299, - I64VEC4 = 300, - U64VEC2 = 301, - U64VEC3 = 302, - U64VEC4 = 303, - I32VEC2 = 304, - I32VEC3 = 305, - I32VEC4 = 306, - U32VEC2 = 307, - U32VEC3 = 308, - U32VEC4 = 309, - I16VEC2 = 310, - I16VEC3 = 311, - I16VEC4 = 312, - U16VEC2 = 313, - U16VEC3 = 314, - U16VEC4 = 315, - I8VEC2 = 316, - I8VEC3 = 317, - I8VEC4 = 318, - U8VEC2 = 319, - U8VEC3 = 320, - U8VEC4 = 321, - VEC2 = 322, - VEC3 = 323, - VEC4 = 324, - MAT2 = 325, - MAT3 = 326, - MAT4 = 327, - CENTROID = 328, - IN = 329, - OUT = 330, - INOUT = 331, - UNIFORM = 332, - PATCH = 333, - SAMPLE = 334, - BUFFER = 335, - SHARED = 336, - NONUNIFORM = 337, - PAYLOADNV = 338, - PAYLOADINNV = 339, - HITATTRNV = 340, - CALLDATANV = 341, - CALLDATAINNV = 342, - COHERENT = 343, - VOLATILE = 344, - RESTRICT = 345, - READONLY = 346, - WRITEONLY = 347, - DEVICECOHERENT = 348, - QUEUEFAMILYCOHERENT = 349, - WORKGROUPCOHERENT = 350, - SUBGROUPCOHERENT = 351, - NONPRIVATE = 352, - DVEC2 = 353, - DVEC3 = 354, - DVEC4 = 355, - DMAT2 = 356, - DMAT3 = 357, - DMAT4 = 358, - F16VEC2 = 359, - F16VEC3 = 360, - F16VEC4 = 361, - F16MAT2 = 362, - F16MAT3 = 363, - F16MAT4 = 364, - F32VEC2 = 365, - F32VEC3 = 366, - F32VEC4 = 367, - F32MAT2 = 368, - F32MAT3 = 369, - F32MAT4 = 370, - F64VEC2 = 371, - F64VEC3 = 372, - F64VEC4 = 373, - F64MAT2 = 374, - F64MAT3 = 375, - F64MAT4 = 376, - NOPERSPECTIVE = 377, - FLAT = 378, - SMOOTH = 379, - LAYOUT = 380, - EXPLICITINTERPAMD = 381, - PERVERTEXNV = 382, - PERPRIMITIVENV = 383, - PERVIEWNV = 384, - PERTASKNV = 385, - MAT2X2 = 386, - MAT2X3 = 387, - MAT2X4 = 388, - MAT3X2 = 389, - MAT3X3 = 390, - MAT3X4 = 391, - MAT4X2 = 392, - MAT4X3 = 393, - MAT4X4 = 394, - DMAT2X2 = 395, - DMAT2X3 = 396, - DMAT2X4 = 397, - DMAT3X2 = 398, - DMAT3X3 = 399, - DMAT3X4 = 400, - DMAT4X2 = 401, - DMAT4X3 = 402, - DMAT4X4 = 403, - F16MAT2X2 = 404, - F16MAT2X3 = 405, - F16MAT2X4 = 406, - F16MAT3X2 = 407, - F16MAT3X3 = 408, - F16MAT3X4 = 409, - F16MAT4X2 = 410, - F16MAT4X3 = 411, - F16MAT4X4 = 412, - F32MAT2X2 = 413, - F32MAT2X3 = 414, - F32MAT2X4 = 415, - F32MAT3X2 = 416, - F32MAT3X3 = 417, - F32MAT3X4 = 418, - F32MAT4X2 = 419, - F32MAT4X3 = 420, - F32MAT4X4 = 421, - F64MAT2X2 = 422, - F64MAT2X3 = 423, - F64MAT2X4 = 424, - F64MAT3X2 = 425, - F64MAT3X3 = 426, - F64MAT3X4 = 427, - F64MAT4X2 = 428, - F64MAT4X3 = 429, - F64MAT4X4 = 430, - ATOMIC_UINT = 431, - ACCSTRUCTNV = 432, - FCOOPMATNV = 433, - SAMPLER1D = 434, - SAMPLER2D = 435, - SAMPLER3D = 436, - SAMPLERCUBE = 437, - SAMPLER1DSHADOW = 438, - SAMPLER2DSHADOW = 439, - SAMPLERCUBESHADOW = 440, - SAMPLER1DARRAY = 441, - SAMPLER2DARRAY = 442, - SAMPLER1DARRAYSHADOW = 443, - SAMPLER2DARRAYSHADOW = 444, - ISAMPLER1D = 445, - ISAMPLER2D = 446, - ISAMPLER3D = 447, - ISAMPLERCUBE = 448, - ISAMPLER1DARRAY = 449, - ISAMPLER2DARRAY = 450, - USAMPLER1D = 451, - USAMPLER2D = 452, - USAMPLER3D = 453, - USAMPLERCUBE = 454, - USAMPLER1DARRAY = 455, - USAMPLER2DARRAY = 456, - SAMPLER2DRECT = 457, - SAMPLER2DRECTSHADOW = 458, - ISAMPLER2DRECT = 459, - USAMPLER2DRECT = 460, - SAMPLERBUFFER = 461, - ISAMPLERBUFFER = 462, - USAMPLERBUFFER = 463, - SAMPLERCUBEARRAY = 464, - SAMPLERCUBEARRAYSHADOW = 465, - ISAMPLERCUBEARRAY = 466, - USAMPLERCUBEARRAY = 467, - SAMPLER2DMS = 468, - ISAMPLER2DMS = 469, - USAMPLER2DMS = 470, - SAMPLER2DMSARRAY = 471, - ISAMPLER2DMSARRAY = 472, - USAMPLER2DMSARRAY = 473, - SAMPLEREXTERNALOES = 474, - SAMPLEREXTERNAL2DY2YEXT = 475, - F16SAMPLER1D = 476, - F16SAMPLER2D = 477, - F16SAMPLER3D = 478, - F16SAMPLER2DRECT = 479, - F16SAMPLERCUBE = 480, - F16SAMPLER1DARRAY = 481, - F16SAMPLER2DARRAY = 482, - F16SAMPLERCUBEARRAY = 483, - F16SAMPLERBUFFER = 484, - F16SAMPLER2DMS = 485, - F16SAMPLER2DMSARRAY = 486, - F16SAMPLER1DSHADOW = 487, - F16SAMPLER2DSHADOW = 488, - F16SAMPLER1DARRAYSHADOW = 489, - F16SAMPLER2DARRAYSHADOW = 490, - F16SAMPLER2DRECTSHADOW = 491, - F16SAMPLERCUBESHADOW = 492, - F16SAMPLERCUBEARRAYSHADOW = 493, - SAMPLER = 494, - SAMPLERSHADOW = 495, - TEXTURE1D = 496, - TEXTURE2D = 497, - TEXTURE3D = 498, - TEXTURECUBE = 499, - TEXTURE1DARRAY = 500, - TEXTURE2DARRAY = 501, - ITEXTURE1D = 502, - ITEXTURE2D = 503, - ITEXTURE3D = 504, - ITEXTURECUBE = 505, - ITEXTURE1DARRAY = 506, - ITEXTURE2DARRAY = 507, - UTEXTURE1D = 508, - UTEXTURE2D = 509, - UTEXTURE3D = 510, - UTEXTURECUBE = 511, - UTEXTURE1DARRAY = 512, - UTEXTURE2DARRAY = 513, - TEXTURE2DRECT = 514, - ITEXTURE2DRECT = 515, - UTEXTURE2DRECT = 516, - TEXTUREBUFFER = 517, - ITEXTUREBUFFER = 518, - UTEXTUREBUFFER = 519, - TEXTURECUBEARRAY = 520, - ITEXTURECUBEARRAY = 521, - UTEXTURECUBEARRAY = 522, - TEXTURE2DMS = 523, - ITEXTURE2DMS = 524, - UTEXTURE2DMS = 525, - TEXTURE2DMSARRAY = 526, - ITEXTURE2DMSARRAY = 527, - UTEXTURE2DMSARRAY = 528, - F16TEXTURE1D = 529, - F16TEXTURE2D = 530, - F16TEXTURE3D = 531, - F16TEXTURE2DRECT = 532, - F16TEXTURECUBE = 533, - F16TEXTURE1DARRAY = 534, - F16TEXTURE2DARRAY = 535, - F16TEXTURECUBEARRAY = 536, - F16TEXTUREBUFFER = 537, - F16TEXTURE2DMS = 538, - F16TEXTURE2DMSARRAY = 539, - SUBPASSINPUT = 540, - SUBPASSINPUTMS = 541, - ISUBPASSINPUT = 542, - ISUBPASSINPUTMS = 543, - USUBPASSINPUT = 544, - USUBPASSINPUTMS = 545, - F16SUBPASSINPUT = 546, - F16SUBPASSINPUTMS = 547, - IMAGE1D = 548, - IIMAGE1D = 549, - UIMAGE1D = 550, - IMAGE2D = 551, - IIMAGE2D = 552, - UIMAGE2D = 553, - IMAGE3D = 554, - IIMAGE3D = 555, - UIMAGE3D = 556, - IMAGE2DRECT = 557, - IIMAGE2DRECT = 558, - UIMAGE2DRECT = 559, - IMAGECUBE = 560, - IIMAGECUBE = 561, - UIMAGECUBE = 562, - IMAGEBUFFER = 563, - IIMAGEBUFFER = 564, - UIMAGEBUFFER = 565, - IMAGE1DARRAY = 566, - IIMAGE1DARRAY = 567, - UIMAGE1DARRAY = 568, - IMAGE2DARRAY = 569, - IIMAGE2DARRAY = 570, - UIMAGE2DARRAY = 571, - IMAGECUBEARRAY = 572, - IIMAGECUBEARRAY = 573, - UIMAGECUBEARRAY = 574, - IMAGE2DMS = 575, - IIMAGE2DMS = 576, - UIMAGE2DMS = 577, - IMAGE2DMSARRAY = 578, - IIMAGE2DMSARRAY = 579, - UIMAGE2DMSARRAY = 580, - F16IMAGE1D = 581, - F16IMAGE2D = 582, - F16IMAGE3D = 583, - F16IMAGE2DRECT = 584, - F16IMAGECUBE = 585, - F16IMAGE1DARRAY = 586, - F16IMAGE2DARRAY = 587, - F16IMAGECUBEARRAY = 588, - F16IMAGEBUFFER = 589, - F16IMAGE2DMS = 590, - F16IMAGE2DMSARRAY = 591, - STRUCT = 592, - VOID = 593, - WHILE = 594, - IDENTIFIER = 595, - TYPE_NAME = 596, - FLOATCONSTANT = 597, - DOUBLECONSTANT = 598, - INT16CONSTANT = 599, - UINT16CONSTANT = 600, - INT32CONSTANT = 601, - UINT32CONSTANT = 602, - INTCONSTANT = 603, - UINTCONSTANT = 604, - INT64CONSTANT = 605, - UINT64CONSTANT = 606, - BOOLCONSTANT = 607, - FLOAT16CONSTANT = 608, - LEFT_OP = 609, - RIGHT_OP = 610, - INC_OP = 611, - DEC_OP = 612, - LE_OP = 613, - GE_OP = 614, - EQ_OP = 615, - NE_OP = 616, - AND_OP = 617, - OR_OP = 618, - XOR_OP = 619, - MUL_ASSIGN = 620, - DIV_ASSIGN = 621, - ADD_ASSIGN = 622, - MOD_ASSIGN = 623, - LEFT_ASSIGN = 624, - RIGHT_ASSIGN = 625, - AND_ASSIGN = 626, - XOR_ASSIGN = 627, - OR_ASSIGN = 628, - SUB_ASSIGN = 629, - LEFT_PAREN = 630, - RIGHT_PAREN = 631, - LEFT_BRACKET = 632, - RIGHT_BRACKET = 633, - LEFT_BRACE = 634, - RIGHT_BRACE = 635, - DOT = 636, - COMMA = 637, - COLON = 638, - EQUAL = 639, - SEMICOLON = 640, - BANG = 641, - DASH = 642, - TILDE = 643, - PLUS = 644, - STAR = 645, - SLASH = 646, - PERCENT = 647, - LEFT_ANGLE = 648, - RIGHT_ANGLE = 649, - VERTICAL_BAR = 650, - CARET = 651, - AMPERSAND = 652, - QUESTION = 653, - INVARIANT = 654, - PRECISE = 655, - HIGH_PRECISION = 656, - MEDIUM_PRECISION = 657, - LOW_PRECISION = 658, - PRECISION = 659, - PACKED = 660, - RESOURCE = 661, - SUPERP = 662 + DEMOTE = 289, + BVEC2 = 290, + BVEC3 = 291, + BVEC4 = 292, + IVEC2 = 293, + IVEC3 = 294, + IVEC4 = 295, + UVEC2 = 296, + UVEC3 = 297, + UVEC4 = 298, + I64VEC2 = 299, + I64VEC3 = 300, + I64VEC4 = 301, + U64VEC2 = 302, + U64VEC3 = 303, + U64VEC4 = 304, + I32VEC2 = 305, + I32VEC3 = 306, + I32VEC4 = 307, + U32VEC2 = 308, + U32VEC3 = 309, + U32VEC4 = 310, + I16VEC2 = 311, + I16VEC3 = 312, + I16VEC4 = 313, + U16VEC2 = 314, + U16VEC3 = 315, + U16VEC4 = 316, + I8VEC2 = 317, + I8VEC3 = 318, + I8VEC4 = 319, + U8VEC2 = 320, + U8VEC3 = 321, + U8VEC4 = 322, + VEC2 = 323, + VEC3 = 324, + VEC4 = 325, + MAT2 = 326, + MAT3 = 327, + MAT4 = 328, + CENTROID = 329, + IN = 330, + OUT = 331, + INOUT = 332, + UNIFORM = 333, + PATCH = 334, + SAMPLE = 335, + BUFFER = 336, + SHARED = 337, + NONUNIFORM = 338, + PAYLOADNV = 339, + PAYLOADINNV = 340, + HITATTRNV = 341, + CALLDATANV = 342, + CALLDATAINNV = 343, + COHERENT = 344, + VOLATILE = 345, + RESTRICT = 346, + READONLY = 347, + WRITEONLY = 348, + DEVICECOHERENT = 349, + QUEUEFAMILYCOHERENT = 350, + WORKGROUPCOHERENT = 351, + SUBGROUPCOHERENT = 352, + NONPRIVATE = 353, + DVEC2 = 354, + DVEC3 = 355, + DVEC4 = 356, + DMAT2 = 357, + DMAT3 = 358, + DMAT4 = 359, + F16VEC2 = 360, + F16VEC3 = 361, + F16VEC4 = 362, + F16MAT2 = 363, + F16MAT3 = 364, + F16MAT4 = 365, + F32VEC2 = 366, + F32VEC3 = 367, + F32VEC4 = 368, + F32MAT2 = 369, + F32MAT3 = 370, + F32MAT4 = 371, + F64VEC2 = 372, + F64VEC3 = 373, + F64VEC4 = 374, + F64MAT2 = 375, + F64MAT3 = 376, + F64MAT4 = 377, + NOPERSPECTIVE = 378, + FLAT = 379, + SMOOTH = 380, + LAYOUT = 381, + EXPLICITINTERPAMD = 382, + PERVERTEXNV = 383, + PERPRIMITIVENV = 384, + PERVIEWNV = 385, + PERTASKNV = 386, + MAT2X2 = 387, + MAT2X3 = 388, + MAT2X4 = 389, + MAT3X2 = 390, + MAT3X3 = 391, + MAT3X4 = 392, + MAT4X2 = 393, + MAT4X3 = 394, + MAT4X4 = 395, + DMAT2X2 = 396, + DMAT2X3 = 397, + DMAT2X4 = 398, + DMAT3X2 = 399, + DMAT3X3 = 400, + DMAT3X4 = 401, + DMAT4X2 = 402, + DMAT4X3 = 403, + DMAT4X4 = 404, + F16MAT2X2 = 405, + F16MAT2X3 = 406, + F16MAT2X4 = 407, + F16MAT3X2 = 408, + F16MAT3X3 = 409, + F16MAT3X4 = 410, + F16MAT4X2 = 411, + F16MAT4X3 = 412, + F16MAT4X4 = 413, + F32MAT2X2 = 414, + F32MAT2X3 = 415, + F32MAT2X4 = 416, + F32MAT3X2 = 417, + F32MAT3X3 = 418, + F32MAT3X4 = 419, + F32MAT4X2 = 420, + F32MAT4X3 = 421, + F32MAT4X4 = 422, + F64MAT2X2 = 423, + F64MAT2X3 = 424, + F64MAT2X4 = 425, + F64MAT3X2 = 426, + F64MAT3X3 = 427, + F64MAT3X4 = 428, + F64MAT4X2 = 429, + F64MAT4X3 = 430, + F64MAT4X4 = 431, + ATOMIC_UINT = 432, + ACCSTRUCTNV = 433, + FCOOPMATNV = 434, + SAMPLER1D = 435, + SAMPLER2D = 436, + SAMPLER3D = 437, + SAMPLERCUBE = 438, + SAMPLER1DSHADOW = 439, + SAMPLER2DSHADOW = 440, + SAMPLERCUBESHADOW = 441, + SAMPLER1DARRAY = 442, + SAMPLER2DARRAY = 443, + SAMPLER1DARRAYSHADOW = 444, + SAMPLER2DARRAYSHADOW = 445, + ISAMPLER1D = 446, + ISAMPLER2D = 447, + ISAMPLER3D = 448, + ISAMPLERCUBE = 449, + ISAMPLER1DARRAY = 450, + ISAMPLER2DARRAY = 451, + USAMPLER1D = 452, + USAMPLER2D = 453, + USAMPLER3D = 454, + USAMPLERCUBE = 455, + USAMPLER1DARRAY = 456, + USAMPLER2DARRAY = 457, + SAMPLER2DRECT = 458, + SAMPLER2DRECTSHADOW = 459, + ISAMPLER2DRECT = 460, + USAMPLER2DRECT = 461, + SAMPLERBUFFER = 462, + ISAMPLERBUFFER = 463, + USAMPLERBUFFER = 464, + SAMPLERCUBEARRAY = 465, + SAMPLERCUBEARRAYSHADOW = 466, + ISAMPLERCUBEARRAY = 467, + USAMPLERCUBEARRAY = 468, + SAMPLER2DMS = 469, + ISAMPLER2DMS = 470, + USAMPLER2DMS = 471, + SAMPLER2DMSARRAY = 472, + ISAMPLER2DMSARRAY = 473, + USAMPLER2DMSARRAY = 474, + SAMPLEREXTERNALOES = 475, + SAMPLEREXTERNAL2DY2YEXT = 476, + F16SAMPLER1D = 477, + F16SAMPLER2D = 478, + F16SAMPLER3D = 479, + F16SAMPLER2DRECT = 480, + F16SAMPLERCUBE = 481, + F16SAMPLER1DARRAY = 482, + F16SAMPLER2DARRAY = 483, + F16SAMPLERCUBEARRAY = 484, + F16SAMPLERBUFFER = 485, + F16SAMPLER2DMS = 486, + F16SAMPLER2DMSARRAY = 487, + F16SAMPLER1DSHADOW = 488, + F16SAMPLER2DSHADOW = 489, + F16SAMPLER1DARRAYSHADOW = 490, + F16SAMPLER2DARRAYSHADOW = 491, + F16SAMPLER2DRECTSHADOW = 492, + F16SAMPLERCUBESHADOW = 493, + F16SAMPLERCUBEARRAYSHADOW = 494, + SAMPLER = 495, + SAMPLERSHADOW = 496, + TEXTURE1D = 497, + TEXTURE2D = 498, + TEXTURE3D = 499, + TEXTURECUBE = 500, + TEXTURE1DARRAY = 501, + TEXTURE2DARRAY = 502, + ITEXTURE1D = 503, + ITEXTURE2D = 504, + ITEXTURE3D = 505, + ITEXTURECUBE = 506, + ITEXTURE1DARRAY = 507, + ITEXTURE2DARRAY = 508, + UTEXTURE1D = 509, + UTEXTURE2D = 510, + UTEXTURE3D = 511, + UTEXTURECUBE = 512, + UTEXTURE1DARRAY = 513, + UTEXTURE2DARRAY = 514, + TEXTURE2DRECT = 515, + ITEXTURE2DRECT = 516, + UTEXTURE2DRECT = 517, + TEXTUREBUFFER = 518, + ITEXTUREBUFFER = 519, + UTEXTUREBUFFER = 520, + TEXTURECUBEARRAY = 521, + ITEXTURECUBEARRAY = 522, + UTEXTURECUBEARRAY = 523, + TEXTURE2DMS = 524, + ITEXTURE2DMS = 525, + UTEXTURE2DMS = 526, + TEXTURE2DMSARRAY = 527, + ITEXTURE2DMSARRAY = 528, + UTEXTURE2DMSARRAY = 529, + F16TEXTURE1D = 530, + F16TEXTURE2D = 531, + F16TEXTURE3D = 532, + F16TEXTURE2DRECT = 533, + F16TEXTURECUBE = 534, + F16TEXTURE1DARRAY = 535, + F16TEXTURE2DARRAY = 536, + F16TEXTURECUBEARRAY = 537, + F16TEXTUREBUFFER = 538, + F16TEXTURE2DMS = 539, + F16TEXTURE2DMSARRAY = 540, + SUBPASSINPUT = 541, + SUBPASSINPUTMS = 542, + ISUBPASSINPUT = 543, + ISUBPASSINPUTMS = 544, + USUBPASSINPUT = 545, + USUBPASSINPUTMS = 546, + F16SUBPASSINPUT = 547, + F16SUBPASSINPUTMS = 548, + IMAGE1D = 549, + IIMAGE1D = 550, + UIMAGE1D = 551, + IMAGE2D = 552, + IIMAGE2D = 553, + UIMAGE2D = 554, + IMAGE3D = 555, + IIMAGE3D = 556, + UIMAGE3D = 557, + IMAGE2DRECT = 558, + IIMAGE2DRECT = 559, + UIMAGE2DRECT = 560, + IMAGECUBE = 561, + IIMAGECUBE = 562, + UIMAGECUBE = 563, + IMAGEBUFFER = 564, + IIMAGEBUFFER = 565, + UIMAGEBUFFER = 566, + IMAGE1DARRAY = 567, + IIMAGE1DARRAY = 568, + UIMAGE1DARRAY = 569, + IMAGE2DARRAY = 570, + IIMAGE2DARRAY = 571, + UIMAGE2DARRAY = 572, + IMAGECUBEARRAY = 573, + IIMAGECUBEARRAY = 574, + UIMAGECUBEARRAY = 575, + IMAGE2DMS = 576, + IIMAGE2DMS = 577, + UIMAGE2DMS = 578, + IMAGE2DMSARRAY = 579, + IIMAGE2DMSARRAY = 580, + UIMAGE2DMSARRAY = 581, + F16IMAGE1D = 582, + F16IMAGE2D = 583, + F16IMAGE3D = 584, + F16IMAGE2DRECT = 585, + F16IMAGECUBE = 586, + F16IMAGE1DARRAY = 587, + F16IMAGE2DARRAY = 588, + F16IMAGECUBEARRAY = 589, + F16IMAGEBUFFER = 590, + F16IMAGE2DMS = 591, + F16IMAGE2DMSARRAY = 592, + STRUCT = 593, + VOID = 594, + WHILE = 595, + IDENTIFIER = 596, + TYPE_NAME = 597, + FLOATCONSTANT = 598, + DOUBLECONSTANT = 599, + INT16CONSTANT = 600, + UINT16CONSTANT = 601, + INT32CONSTANT = 602, + UINT32CONSTANT = 603, + INTCONSTANT = 604, + UINTCONSTANT = 605, + INT64CONSTANT = 606, + UINT64CONSTANT = 607, + BOOLCONSTANT = 608, + FLOAT16CONSTANT = 609, + LEFT_OP = 610, + RIGHT_OP = 611, + INC_OP = 612, + DEC_OP = 613, + LE_OP = 614, + GE_OP = 615, + EQ_OP = 616, + NE_OP = 617, + AND_OP = 618, + OR_OP = 619, + XOR_OP = 620, + MUL_ASSIGN = 621, + DIV_ASSIGN = 622, + ADD_ASSIGN = 623, + MOD_ASSIGN = 624, + LEFT_ASSIGN = 625, + RIGHT_ASSIGN = 626, + AND_ASSIGN = 627, + XOR_ASSIGN = 628, + OR_ASSIGN = 629, + SUB_ASSIGN = 630, + LEFT_PAREN = 631, + RIGHT_PAREN = 632, + LEFT_BRACKET = 633, + RIGHT_BRACKET = 634, + LEFT_BRACE = 635, + RIGHT_BRACE = 636, + DOT = 637, + COMMA = 638, + COLON = 639, + EQUAL = 640, + SEMICOLON = 641, + BANG = 642, + DASH = 643, + TILDE = 644, + PLUS = 645, + STAR = 646, + SLASH = 647, + PERCENT = 648, + LEFT_ANGLE = 649, + RIGHT_ANGLE = 650, + VERTICAL_BAR = 651, + CARET = 652, + AMPERSAND = 653, + QUESTION = 654, + INVARIANT = 655, + PRECISE = 656, + HIGH_PRECISION = 657, + MEDIUM_PRECISION = 658, + LOW_PRECISION = 659, + PRECISION = 660, + PACKED = 661, + RESOURCE = 662, + SUPERP = 663 }; #endif @@ -494,7 +495,7 @@ union YYSTYPE glslang::TArraySizes* typeParameters; } interm; -#line 498 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */ +#line 499 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index abf5681b..3ca3a80f 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -1098,6 +1098,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpCooperativeMatrixStore: out.debug << "Store cooperative matrix"; break; case EOpCooperativeMatrixMulAdd: out.debug << "MulAdd cooperative matrices"; break; + case EOpIsHelperInvocation: out.debug << "IsHelperInvocation"; break; + default: out.debug.message(EPrefixError, "Bad aggregation op"); } @@ -1392,6 +1394,7 @@ bool TOutputTraverser::visitBranch(TVisit /* visit*/, TIntermBranch* node) case EOpContinue: out.debug << "Branch: Continue"; break; case EOpReturn: out.debug << "Branch: Return"; break; case EOpCase: out.debug << "case: "; break; + case EOpDemote: out.debug << "Demote"; break; case EOpDefault: out.debug << "default: "; break; default: out.debug << "Branch: Unknown Branch"; break; } diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 3addb662..c7b7a892 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -294,6 +294,7 @@ INSTANTIATE_TEST_CASE_P( "spv.bufferhandle9.frag", "spv.bufferhandle_Error.frag", "spv.builtInXFB.vert", + "spv.conditionalDemote.frag", "spv.conditionalDiscard.frag", "spv.constStruct.vert", "spv.constConstruct.vert", @@ -304,6 +305,7 @@ INSTANTIATE_TEST_CASE_P( "spv.dataOut.frag", "spv.dataOutIndirect.frag", "spv.dataOutIndirect.vert", + "spv.demoteDisabled.frag", "spv.deepRvalue.frag", "spv.depthOut.frag", "spv.discard-dce.frag", From 73f010813812ec9177eaa6bb16bff6258f7885f2 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Tue, 2 Jul 2019 01:51:50 -0600 Subject: [PATCH 22/42] Build: Tweak PR #1808 to avoid an implicit conversion warning. --- glslang/MachineIndependent/Intermediate.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index e20068f0..d841c905 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -3790,6 +3790,7 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC for (int i=0; i < size; i++) { #define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast(rightUnionArray[i].Get())) +#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0) #define TO_ALL(Get) \ switch (promoteTo) { \ @@ -3804,7 +3805,7 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \ case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \ case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \ - case EbtBool: PROMOTE(setBConst, bool, Get); break; \ + case EbtBool: PROMOTE_TO_BOOL(Get); break; \ default: return node; \ } From e5c394bcbaf33bbd53b859c71352571791a2c917 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Tue, 2 Jul 2019 09:32:48 -0600 Subject: [PATCH 23/42] Standalone: Fix #1814: Check that linkage was specified for reflection. --- StandAlone/StandAlone.cpp | 15 ++++++++++++--- glslang/MachineIndependent/ShaderLang.cpp | 10 ++++------ glslang/Public/ShaderLang.h | 2 +- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index 9af2596c..3bb3af39 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -772,8 +772,17 @@ void ProcessArguments(std::vector>& workItem Error("must provide -S when --stdin is given"); // Make sure that -E is not specified alongside linking (which includes SPV generation) - if ((Options & EOptionOutputPreprocessed) && (Options & EOptionLinkProgram)) - Error("can't use -E when linking is selected"); + // Or things that require linking + if (Options & EOptionOutputPreprocessed) { + if (Options & EOptionLinkProgram) + Error("can't use -E when linking is selected"); + if (Options & EOptionDumpReflection) + Error("reflection requires linking, which can't be used when -E when is selected"); + } + + // reflection requires linking + if ((Options & EOptionDumpReflection) && !(Options & EOptionLinkProgram)) + Error("reflection requires -l for linking"); // -o or -x makes no sense if there is no target binary if (binaryFileName && (Options & EOptionSpv) == 0) @@ -1512,7 +1521,7 @@ void usage() " -l link all input files together to form a single module\n" " -m memory leak mode\n" " -o save binary to , requires a binary option (e.g., -V)\n" - " -q dump reflection query database\n" + " -q dump reflection query database; requires -l for linking\n" " -r | --relaxed-errors" " relaxed GLSL semantic error-checking mode\n" " -s silence syntax and semantic error reporting\n" diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index c7e8a342..fa21db94 100755 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -1984,7 +1984,7 @@ const char* TProgram::getInfoDebugLog() bool TProgram::buildReflection(int opts) { - if (! linked || reflection) + if (! linked || reflection != nullptr) return false; int firstStage = EShLangVertex, lastStage = EShLangFragment; @@ -2014,9 +2014,8 @@ bool TProgram::buildReflection(int opts) return true; } -unsigned TProgram::getLocalSize(int dim) const { return reflection->getLocalSize(dim); } -int TProgram::getReflectionIndex(const char* name) const { return reflection->getIndex(name); } - +unsigned TProgram::getLocalSize(int dim) const { return reflection->getLocalSize(dim); } +int TProgram::getReflectionIndex(const char* name) const { return reflection->getIndex(name); } int TProgram::getNumUniformVariables() const { return reflection->getNumUniforms(); } const TObjectReflection& TProgram::getUniform(int index) const { return reflection->getUniform(index); } int TProgram::getNumUniformBlocks() const { return reflection->getNumUniformBlocks(); } @@ -2031,8 +2030,7 @@ int TProgram::getNumBufferBlocks() const { return r const TObjectReflection& TProgram::getBufferBlock(int index) const { return reflection->getStorageBufferBlock(index); } int TProgram::getNumAtomicCounters() const { return reflection->getNumAtomicCounters(); } const TObjectReflection& TProgram::getAtomicCounter(int index) const { return reflection->getAtomicCounter(index); } - -void TProgram::dumpReflection() { reflection->dump(); } +void TProgram::dumpReflection() { if (reflection != nullptr) reflection->dump(); } // // I/O mapping implementation. diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 9d4ec675..954ce8e0 100755 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -737,7 +737,7 @@ public: // Reflection Interface // call first, to do liveness analysis, index mapping, etc.; returns false on failure - bool buildReflection(int opts = EShReflectionDefault); + bool buildReflection(int opts = EShReflectionDefault); unsigned getLocalSize(int dim) const; // return dim'th local size int getReflectionIndex(const char *name) const; From 6a50a7850d9fe6fea5eb911dfd19f7efe9057481 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Tue, 2 Jul 2019 10:57:48 -0500 Subject: [PATCH 24/42] update spirv-headers to pick up demote_to_helper_invocation --- SPIRV/doc.cpp | 2 ++ Test/baseResults/spv.conditionalDemote.frag.out | 3 +-- known_good.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index f1f042da..bd639ae4 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -958,6 +958,8 @@ const char* CapabilityString(int info) case CapabilityFragmentShaderPixelInterlockEXT: return "CapabilityFragmentShaderPixelInterlockEXT"; case CapabilityFragmentShaderShadingRateInterlockEXT: return "CapabilityFragmentShaderShadingRateInterlockEXT"; + case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT"; + default: return "Bad"; } } diff --git a/Test/baseResults/spv.conditionalDemote.frag.out b/Test/baseResults/spv.conditionalDemote.frag.out index 6e350192..10f2c23e 100644 --- a/Test/baseResults/spv.conditionalDemote.frag.out +++ b/Test/baseResults/spv.conditionalDemote.frag.out @@ -1,11 +1,10 @@ spv.conditionalDemote.frag -Validation failed // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 38 Capability Shader - Capability Bad + Capability DemoteToHelperInvocationEXT Extension "SPV_EXT_demote_to_helper_invocation" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 diff --git a/known_good.json b/known_good.json index 16716fd5..113172d6 100644 --- a/known_good.json +++ b/known_good.json @@ -12,7 +12,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "8b911bd2ba37677037b38c9bd286c7c05701bcda" + "commit" : "123dc278f204f8e833e1a88d31c46d0edf81d4b2" } ] } From 4b4b41a63499d34c527ee4f714dde8072f60c900 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Wed, 3 Jul 2019 01:27:39 -0600 Subject: [PATCH 25/42] HLSL: Fix #1815: Don't constant fold spec-constant array indexing. --- Test/baseResults/hlsl.specConstant.frag.out | 230 ++++++++++++++++++++ Test/hlsl.specConstant.frag | 15 ++ gtests/Hlsl.FromFile.cpp | 1 + hlsl/hlslParseHelper.cpp | 3 +- 4 files changed, 248 insertions(+), 1 deletion(-) create mode 100755 Test/baseResults/hlsl.specConstant.frag.out create mode 100755 Test/hlsl.specConstant.frag diff --git a/Test/baseResults/hlsl.specConstant.frag.out b/Test/baseResults/hlsl.specConstant.frag.out new file mode 100755 index 00000000..c2942e34 --- /dev/null +++ b/Test/baseResults/hlsl.specConstant.frag.out @@ -0,0 +1,230 @@ +hlsl.specConstant.frag +Shader version: 500 +gl_FragCoord origin is upper left +0:? Sequence +0:6 Function Definition: @main( ( temp 4-component vector of float) +0:6 Function Parameters: +0:? Sequence +0:8 Sequence +0:8 move second child to first child ( temp uint) +0:8 'i' ( temp uint) +0:8 Constant: +0:8 0 (const uint) +0:8 Loop with condition tested first +0:8 Loop Condition +0:8 Compare Less Than ( temp bool) +0:8 'i' ( temp uint) +0:8 indirect index ( const uint) +0:8 Constant: +0:8 10 (const uint) +0:8 20 (const uint) +0:8 30 (const uint) +0:8 40 (const uint) +0:8 'index' ( specialization-constant const uint) +0:8 2 (const uint) +0:8 Loop Body +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'r' ( temp 4-component vector of float) +0:9 Construct vec4 ( temp 4-component vector of float) +0:9 Convert uint to float ( temp float) +0:9 'i' ( temp uint) +0:8 Loop Terminal Expression +0:8 Post-Increment ( temp uint) +0:8 'i' ( temp uint) +0:11 add second child into first child ( temp 4-component vector of float) +0:11 'r' ( temp 4-component vector of float) +0:11 Convert uint to float ( temp float) +0:11 add ( specialization-constant const uint) +0:11 'index' ( specialization-constant const uint) +0:11 2 (const uint) +0:11 'index' ( specialization-constant const uint) +0:11 2 (const uint) +0:12 add second child into first child ( temp 4-component vector of float) +0:12 'r' ( temp 4-component vector of float) +0:12 Convert uint to float ( temp float) +0:12 component-wise multiply ( specialization-constant const uint) +0:12 Constant: +0:12 2 (const uint) +0:12 'index' ( specialization-constant const uint) +0:12 2 (const uint) +0:14 Branch: Return with expression +0:14 'r' ( temp 4-component vector of float) +0:6 Function Definition: main( ( temp void) +0:6 Function Parameters: +0:? Sequence +0:6 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:6 Function Call: @main( ( temp 4-component vector of float) +0:? Linker Objects +0:? 'index' ( specialization-constant const uint) +0:? 2 (const uint) +0:? 'array' ( const 4-element array of uint) +0:? 10 (const uint) +0:? 20 (const uint) +0:? 30 (const uint) +0:? 40 (const uint) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 500 +gl_FragCoord origin is upper left +0:? Sequence +0:6 Function Definition: @main( ( temp 4-component vector of float) +0:6 Function Parameters: +0:? Sequence +0:8 Sequence +0:8 move second child to first child ( temp uint) +0:8 'i' ( temp uint) +0:8 Constant: +0:8 0 (const uint) +0:8 Loop with condition tested first +0:8 Loop Condition +0:8 Compare Less Than ( temp bool) +0:8 'i' ( temp uint) +0:8 indirect index ( const uint) +0:8 Constant: +0:8 10 (const uint) +0:8 20 (const uint) +0:8 30 (const uint) +0:8 40 (const uint) +0:8 'index' ( specialization-constant const uint) +0:8 2 (const uint) +0:8 Loop Body +0:9 move second child to first child ( temp 4-component vector of float) +0:9 'r' ( temp 4-component vector of float) +0:9 Construct vec4 ( temp 4-component vector of float) +0:9 Convert uint to float ( temp float) +0:9 'i' ( temp uint) +0:8 Loop Terminal Expression +0:8 Post-Increment ( temp uint) +0:8 'i' ( temp uint) +0:11 add second child into first child ( temp 4-component vector of float) +0:11 'r' ( temp 4-component vector of float) +0:11 Convert uint to float ( temp float) +0:11 add ( specialization-constant const uint) +0:11 'index' ( specialization-constant const uint) +0:11 2 (const uint) +0:11 'index' ( specialization-constant const uint) +0:11 2 (const uint) +0:12 add second child into first child ( temp 4-component vector of float) +0:12 'r' ( temp 4-component vector of float) +0:12 Convert uint to float ( temp float) +0:12 component-wise multiply ( specialization-constant const uint) +0:12 Constant: +0:12 2 (const uint) +0:12 'index' ( specialization-constant const uint) +0:12 2 (const uint) +0:14 Branch: Return with expression +0:14 'r' ( temp 4-component vector of float) +0:6 Function Definition: main( ( temp void) +0:6 Function Parameters: +0:? Sequence +0:6 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:6 Function Call: @main( ( temp 4-component vector of float) +0:? Linker Objects +0:? 'index' ( specialization-constant const uint) +0:? 2 (const uint) +0:? 'array' ( const 4-element array of uint) +0:? 10 (const uint) +0:? 20 (const uint) +0:? 30 (const uint) +0:? 40 (const uint) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 80007 +// Id's are bound by 61 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 59 + ExecutionMode 4 OriginUpperLeft + Source HLSL 500 + Name 4 "main" + Name 9 "@main(" + Name 13 "i" + Name 28 "index" + Name 30 "indexable" + Name 36 "r" + Name 59 "@entryPointOutput" + Decorate 28(index) SpecId 0 + Decorate 59(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeFunction 7(fvec4) + 11: TypeInt 32 0 + 12: TypePointer Function 11(int) + 14: 11(int) Constant 0 + 21: 11(int) Constant 4 + 22: TypeArray 11(int) 21 + 23: 11(int) Constant 10 + 24: 11(int) Constant 20 + 25: 11(int) Constant 30 + 26: 11(int) Constant 40 + 27: 22 ConstantComposite 23 24 25 26 + 28(index): 11(int) SpecConstant 2 + 29: TypePointer Function 22 + 33: TypeBool + 35: TypePointer Function 7(fvec4) + 41: TypeInt 32 1 + 42: 41(int) Constant 1 + 44: 11(int) SpecConstantOp 128 28(index) 28(index) + 49: 11(int) Constant 2 + 50: 11(int) SpecConstantOp 132 49 28(index) + 58: TypePointer Output 7(fvec4) +59(@entryPointOutput): 58(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 60: 7(fvec4) FunctionCall 9(@main() + Store 59(@entryPointOutput) 60 + Return + FunctionEnd + 9(@main(): 7(fvec4) Function None 8 + 10: Label + 13(i): 12(ptr) Variable Function + 30(indexable): 29(ptr) Variable Function + 36(r): 35(ptr) Variable Function + Store 13(i) 14 + Branch 15 + 15: Label + LoopMerge 17 18 None + Branch 19 + 19: Label + 20: 11(int) Load 13(i) + Store 30(indexable) 27 + 31: 12(ptr) AccessChain 30(indexable) 28(index) + 32: 11(int) Load 31 + 34: 33(bool) ULessThan 20 32 + BranchConditional 34 16 17 + 16: Label + 37: 11(int) Load 13(i) + 38: 6(float) ConvertUToF 37 + 39: 7(fvec4) CompositeConstruct 38 38 38 38 + Store 36(r) 39 + Branch 18 + 18: Label + 40: 11(int) Load 13(i) + 43: 11(int) IAdd 40 42 + Store 13(i) 43 + Branch 15 + 17: Label + 45: 6(float) ConvertUToF 44 + 46: 7(fvec4) Load 36(r) + 47: 7(fvec4) CompositeConstruct 45 45 45 45 + 48: 7(fvec4) FAdd 46 47 + Store 36(r) 48 + 51: 6(float) ConvertUToF 50 + 52: 7(fvec4) Load 36(r) + 53: 7(fvec4) CompositeConstruct 51 51 51 51 + 54: 7(fvec4) FAdd 52 53 + Store 36(r) 54 + 55: 7(fvec4) Load 36(r) + ReturnValue 55 + FunctionEnd diff --git a/Test/hlsl.specConstant.frag b/Test/hlsl.specConstant.frag new file mode 100755 index 00000000..ab2a815e --- /dev/null +++ b/Test/hlsl.specConstant.frag @@ -0,0 +1,15 @@ +[[vk::constant_id(0)]] const uint index = 2; + +static const uint array[] = { 10, 20, 30, 40 }; + +float4 main( ) : SV_TARGET +{ + float4 r; + for(uint i = 0; i < array[index]; i++) + r = i; + + r += index + index; + r += 2 * index; + + return r; +} diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 6fb69e4b..7738c804 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -351,6 +351,7 @@ INSTANTIATE_TEST_CASE_P( {"hlsl.shapeConvRet.frag", "main"}, {"hlsl.self_cast.frag", "main"}, {"hlsl.snorm.uav.comp", "main"}, + {"hlsl.specConstant.frag", "main"}, {"hlsl.staticMemberFunction.frag", "main"}, {"hlsl.staticFuncInit.frag", "main"}, {"hlsl.store.rwbyteaddressbuffer.type.comp", "main"}, diff --git a/hlsl/hlslParseHelper.cpp b/hlsl/hlslParseHelper.cpp index 56743104..a972009c 100644 --- a/hlsl/hlslParseHelper.cpp +++ b/hlsl/hlslParseHelper.cpp @@ -816,7 +816,8 @@ TIntermTyped* HlslParseContext::handleBracketDereference(const TSourceLoc& loc, base->getAsSymbolNode()->getName().c_str(), ""); else error(loc, " left of '[' is not of type array, matrix, or vector ", "expression", ""); - } else if (base->getType().getQualifier().storage == EvqConst && index->getQualifier().storage == EvqConst) { + } else if (base->getType().getQualifier().isFrontEndConstant() && + index->getQualifier().isFrontEndConstant()) { // both base and index are front-end constants checkIndex(loc, base->getType(), indexValue); return intermediate.foldDereference(base, indexValue, loc); From 96524f91681d646f7d5c41a967e0a41dee27720c Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Wed, 3 Jul 2019 09:28:28 -0600 Subject: [PATCH 26/42] SPV: Fix #1783: Don't do bounds checking for spec-const-expression size It's okay for symbolic spec-consts, but without constant folding, not okay when the array size is an expression. --- Test/baseResults/spv.specConstArrayCheck.vert.out | 6 ++++++ Test/spv.specConstArrayCheck.vert | 14 ++++++++++++++ glslang/Include/revision.h | 2 +- glslang/MachineIndependent/ParseContextBase.cpp | 8 +++++++- gtests/Spv.FromFile.cpp | 1 + 5 files changed, 29 insertions(+), 2 deletions(-) create mode 100755 Test/baseResults/spv.specConstArrayCheck.vert.out create mode 100755 Test/spv.specConstArrayCheck.vert diff --git a/Test/baseResults/spv.specConstArrayCheck.vert.out b/Test/baseResults/spv.specConstArrayCheck.vert.out new file mode 100755 index 00000000..d9b0779f --- /dev/null +++ b/Test/baseResults/spv.specConstArrayCheck.vert.out @@ -0,0 +1,6 @@ +spv.specConstArrayCheck.vert +ERROR: 0:13: '[' : array index out of range '6' +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/spv.specConstArrayCheck.vert b/Test/spv.specConstArrayCheck.vert new file mode 100755 index 00000000..9f0dc0b0 --- /dev/null +++ b/Test/spv.specConstArrayCheck.vert @@ -0,0 +1,14 @@ +#version 450 + +layout(constant_id = 0) const uint a = 1; +layout(constant_id = 1) const uint b = 2; +layout(location = 0) out uint o; + +void main() { + uint arr1[a+a]; + uint arr2[b]; + o = arr1[1]; + o = arr2[1]; + o = arr1[6]; + o = arr2[6]; +} diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h index a22ceb4b..95ce7600 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 3276 +#define GLSLANG_PATCH_LEVEL 3294 diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp index c9ddaead..e0de1a4a 100644 --- a/glslang/MachineIndependent/ParseContextBase.cpp +++ b/glslang/MachineIndependent/ParseContextBase.cpp @@ -254,11 +254,17 @@ void TParseContextBase::trackLinkage(TSymbol& symbol) // Give an error if not. void TParseContextBase::checkIndex(const TSourceLoc& loc, const TType& type, int& index) { + const auto sizeIsSpecializationExpression = [&type]() { + return type.containsSpecializationSize() && + type.getArraySizes()->getOuterNode() != nullptr && + type.getArraySizes()->getOuterNode()->getAsSymbolNode() == nullptr; }; + if (index < 0) { error(loc, "", "[", "index out of range '%d'", index); index = 0; } else if (type.isArray()) { - if (type.isSizedArray() && index >= type.getOuterArraySize()) { + if (type.isSizedArray() && !sizeIsSpecializationExpression() && + index >= type.getOuterArraySize()) { error(loc, "", "[", "array index out of range '%d'", index); index = type.getOuterArraySize() - 1; } diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index c7b7a892..167adaa0 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -545,6 +545,7 @@ INSTANTIATE_TEST_CASE_P( "vulkan.vert", "vulkan.comp", "samplerlessTextureFunctions.frag", + "spv.specConstArrayCheck.vert", })), FileNameAsCustomTestSuffix ); From e085d834279352a85e0b284a840461d7334e2a8c Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Sat, 6 Jul 2019 23:40:10 +0800 Subject: [PATCH 27/42] Change implementation of gl_SIMDGroupSizeAMD --- glslang/MachineIndependent/Initialize.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 0498b487..2ddcae40 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -3838,12 +3838,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV } // GL_AMD_gcn_shader - if (profile != EEsProfile && version >= 450) { + if (profile != EEsProfile && version >= 440) { commonBuiltins.append( "float cubeFaceIndexAMD(vec3);" "vec2 cubeFaceCoordAMD(vec3);" "uint64_t timeAMD();" + "in int gl_SIMDGroupSizeAMD;" "\n"); } @@ -7734,14 +7735,6 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf s.append(builtInConstant); } -#ifdef AMD_EXTENSIONS - // GL_AMD_gcn_shader - if (profile != EEsProfile && version >= 450) { - snprintf(builtInConstant, maxSize, "const int gl_SIMDGroupSizeAMD = 64;"); - s.append(builtInConstant); - } -#endif - #ifdef NV_EXTENSIONS // SPV_NV_mesh_shader if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { @@ -7906,6 +7899,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion } } + #ifdef AMD_EXTENSIONS if (profile != EEsProfile) { symbolTable.setFunctionExtensions("minInvocationsAMD", 1, &E_GL_AMD_shader_ballot); @@ -7940,6 +7934,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion } if (profile != EEsProfile) { + symbolTable.setVariableExtensions("gl_SIMDGroupSizeAMD", 1, &E_GL_AMD_gcn_shader); + SpecialQualifier("gl_SIMDGroupSizeAMD", EvqVaryingIn, EbvSubGroupSize, symbolTable); + symbolTable.setFunctionExtensions("cubeFaceIndexAMD", 1, &E_GL_AMD_gcn_shader); symbolTable.setFunctionExtensions("cubeFaceCoordAMD", 1, &E_GL_AMD_gcn_shader); symbolTable.setFunctionExtensions("timeAMD", 1, &E_GL_AMD_gcn_shader); From 5a391cc57cfba05ca2de108a5b1b6d210de9f4a3 Mon Sep 17 00:00:00 2001 From: Alan Baker Date: Mon, 8 Jul 2019 14:14:13 -0400 Subject: [PATCH 28/42] Update SPIRV-Tools revision --- known_good.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/known_good.json b/known_good.json index 113172d6..707fcace 100644 --- a/known_good.json +++ b/known_good.json @@ -5,7 +5,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "b4bf7bcf0ad3a7eb6857e8d6d594e23f1be6f27a" + "commit" : "456cc598afb6d7c264f20cd3a183d85e369bed9a" }, { "name" : "spirv-tools/external/spirv-headers", From 87dd98f0e9ee6496448ad0f6bf30a69c8f60730c Mon Sep 17 00:00:00 2001 From: Alan Baker Date: Mon, 8 Jul 2019 14:14:23 -0400 Subject: [PATCH 29/42] Test updates --- Test/baseResults/spv.16bitstorage-int.frag.out | 1 + Test/baseResults/spv.16bitstorage-uint.frag.out | 1 + Test/baseResults/spv.16bitstorage.frag.out | 1 + Test/baseResults/spv.8bitstorage-int.frag.out | 1 + Test/baseResults/spv.8bitstorage-uint.frag.out | 1 + Test/baseResults/spv.bufferhandle11.frag.out | 1 + 6 files changed, 6 insertions(+) diff --git a/Test/baseResults/spv.16bitstorage-int.frag.out b/Test/baseResults/spv.16bitstorage-int.frag.out index a09cd879..e66631c2 100644 --- a/Test/baseResults/spv.16bitstorage-int.frag.out +++ b/Test/baseResults/spv.16bitstorage-int.frag.out @@ -1,4 +1,5 @@ spv.16bitstorage-int.frag +Validation failed // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 172 diff --git a/Test/baseResults/spv.16bitstorage-uint.frag.out b/Test/baseResults/spv.16bitstorage-uint.frag.out index 915dfcbd..62892568 100644 --- a/Test/baseResults/spv.16bitstorage-uint.frag.out +++ b/Test/baseResults/spv.16bitstorage-uint.frag.out @@ -1,4 +1,5 @@ spv.16bitstorage-uint.frag +Validation failed // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 173 diff --git a/Test/baseResults/spv.16bitstorage.frag.out b/Test/baseResults/spv.16bitstorage.frag.out index 3fb08a39..133ceed7 100644 --- a/Test/baseResults/spv.16bitstorage.frag.out +++ b/Test/baseResults/spv.16bitstorage.frag.out @@ -1,4 +1,5 @@ spv.16bitstorage.frag +Validation failed // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 172 diff --git a/Test/baseResults/spv.8bitstorage-int.frag.out b/Test/baseResults/spv.8bitstorage-int.frag.out index c0cecfad..4c8bf131 100644 --- a/Test/baseResults/spv.8bitstorage-int.frag.out +++ b/Test/baseResults/spv.8bitstorage-int.frag.out @@ -1,4 +1,5 @@ spv.8bitstorage-int.frag +Validation failed // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 172 diff --git a/Test/baseResults/spv.8bitstorage-uint.frag.out b/Test/baseResults/spv.8bitstorage-uint.frag.out index e89627bd..10c2b2aa 100644 --- a/Test/baseResults/spv.8bitstorage-uint.frag.out +++ b/Test/baseResults/spv.8bitstorage-uint.frag.out @@ -1,4 +1,5 @@ spv.8bitstorage-uint.frag +Validation failed // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 173 diff --git a/Test/baseResults/spv.bufferhandle11.frag.out b/Test/baseResults/spv.bufferhandle11.frag.out index 7e7a7bd6..0cc97ac2 100644 --- a/Test/baseResults/spv.bufferhandle11.frag.out +++ b/Test/baseResults/spv.bufferhandle11.frag.out @@ -2,6 +2,7 @@ spv.bufferhandle11.frag WARNING: 0:6: '' : all default precisions are highp; use precision statements to quiet warning, e.g.: "precision mediump int; precision highp float;" +Validation failed // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 60 From c1ad396258288450c1725fbd359deb339ba564f9 Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Wed, 10 Jul 2019 13:06:15 -0500 Subject: [PATCH 30/42] Avoid generating 8/16-bit constants when 8/16-bit arithmetic extensions aren't enabled --- .../baseResults/spv.16bitstorage-int.frag.out | 18 +++---- .../spv.16bitstorage-uint.frag.out | 13 +++-- Test/baseResults/spv.16bitstorage.frag.out | 16 +++--- Test/baseResults/spv.8bitstorage-int.frag.out | 18 +++---- .../baseResults/spv.8bitstorage-uint.frag.out | 13 +++-- Test/baseResults/spv.bufferhandle11.frag.out | 10 ++-- glslang/Include/intermediate.h | 21 ++++---- glslang/MachineIndependent/Intermediate.cpp | 36 +++++-------- glslang/MachineIndependent/ParseHelper.cpp | 50 +++++++++++++++++++ .../MachineIndependent/localintermediate.h | 21 ++++++++ 10 files changed, 136 insertions(+), 80 deletions(-) diff --git a/Test/baseResults/spv.16bitstorage-int.frag.out b/Test/baseResults/spv.16bitstorage-int.frag.out index e66631c2..c1aacb8e 100644 --- a/Test/baseResults/spv.16bitstorage-int.frag.out +++ b/Test/baseResults/spv.16bitstorage-int.frag.out @@ -1,8 +1,7 @@ spv.16bitstorage-int.frag -Validation failed // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 172 +// Id's are bound by 171 Capability Shader Capability StorageUniformBufferBlock16 @@ -210,10 +209,7 @@ Validation failed 114: 20(int) Constant 7 115: 20(int) Constant 6 116: TypePointer Uniform 20(int) - 166: 6(int16_t) Constant 1 - 167: 6(int16_t) Constant 2 - 168: 7(i16vec2) ConstantComposite 166 167 - 170: 6(int16_t) Constant 3 + 166: 39(ivec2) ConstantComposite 32 33 4(main): 2 Function None 3 5: Label 69(x0): 68(ptr) Variable Function @@ -333,9 +329,11 @@ Validation failed 164: 6(int16_t) Load 163 165: 28(ptr) AccessChain 19(b2) 21 Store 165 164 - 169: 42(ptr) AccessChain 19(b2) 32 - Store 169 168 - 171: 28(ptr) AccessChain 19(b2) 21 - Store 171 170 + 167: 7(i16vec2) SConvert 166 + 168: 42(ptr) AccessChain 19(b2) 32 + Store 168 167 + 169: 6(int16_t) SConvert 58 + 170: 28(ptr) AccessChain 19(b2) 21 + Store 170 169 Return FunctionEnd diff --git a/Test/baseResults/spv.16bitstorage-uint.frag.out b/Test/baseResults/spv.16bitstorage-uint.frag.out index 62892568..ba2e0c6e 100644 --- a/Test/baseResults/spv.16bitstorage-uint.frag.out +++ b/Test/baseResults/spv.16bitstorage-uint.frag.out @@ -1,5 +1,4 @@ spv.16bitstorage-uint.frag -Validation failed // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 173 @@ -211,10 +210,8 @@ Validation failed 115: 20(int) Constant 7 116: 20(int) Constant 6 117: TypePointer Uniform 9(int) - 167: 6(int16_t) Constant 1 - 168: 6(int16_t) Constant 2 - 169: 7(i16vec2) ConstantComposite 167 168 - 171: 6(int16_t) Constant 3 + 167: 39(ivec2) ConstantComposite 82 10 + 170: 9(int) Constant 3 4(main): 2 Function None 3 5: Label 69(x0): 68(ptr) Variable Function @@ -334,8 +331,10 @@ Validation failed 165: 6(int16_t) Load 164 166: 28(ptr) AccessChain 19(b2) 21 Store 166 165 - 170: 42(ptr) AccessChain 19(b2) 32 - Store 170 169 + 168: 7(i16vec2) UConvert 167 + 169: 42(ptr) AccessChain 19(b2) 32 + Store 169 168 + 171: 6(int16_t) UConvert 170 172: 28(ptr) AccessChain 19(b2) 21 Store 172 171 Return diff --git a/Test/baseResults/spv.16bitstorage.frag.out b/Test/baseResults/spv.16bitstorage.frag.out index 133ceed7..5530cf46 100644 --- a/Test/baseResults/spv.16bitstorage.frag.out +++ b/Test/baseResults/spv.16bitstorage.frag.out @@ -1,8 +1,7 @@ spv.16bitstorage.frag -Validation failed // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 172 +// Id's are bound by 173 Capability Shader Capability StorageUniformBufferBlock16 @@ -210,10 +209,9 @@ Validation failed 114: 20(int) Constant 7 115: 20(int) Constant 6 116: TypePointer Uniform 20(int) - 166:6(float16_t) Constant 15360 - 167:6(float16_t) Constant 16384 - 168: 7(f16vec2) ConstantComposite 166 167 - 170:6(float16_t) Constant 16896 + 166: 37(float) Constant 1073741824 + 167: 40(fvec2) ConstantComposite 83 166 + 170: 37(float) Constant 1077936128 4(main): 2 Function None 3 5: Label 70(x0): 69(ptr) Variable Function @@ -333,9 +331,11 @@ Validation failed 164:6(float16_t) Load 163 165: 28(ptr) AccessChain 19(b2) 21 Store 165 164 + 168: 7(f16vec2) FConvert 167 169: 43(ptr) AccessChain 19(b2) 32 Store 169 168 - 171: 28(ptr) AccessChain 19(b2) 21 - Store 171 170 + 171:6(float16_t) FConvert 170 + 172: 28(ptr) AccessChain 19(b2) 21 + Store 172 171 Return FunctionEnd diff --git a/Test/baseResults/spv.8bitstorage-int.frag.out b/Test/baseResults/spv.8bitstorage-int.frag.out index 4c8bf131..47e854f2 100644 --- a/Test/baseResults/spv.8bitstorage-int.frag.out +++ b/Test/baseResults/spv.8bitstorage-int.frag.out @@ -1,8 +1,7 @@ spv.8bitstorage-int.frag -Validation failed // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 172 +// Id's are bound by 171 Capability Shader Capability UniformAndStorageBuffer8BitAccess @@ -209,10 +208,7 @@ Validation failed 114: 20(int) Constant 7 115: 20(int) Constant 6 116: TypePointer Uniform 20(int) - 166: 6(int8_t) Constant 1 - 167: 6(int8_t) Constant 2 - 168: 7(i8vec2) ConstantComposite 166 167 - 170: 6(int8_t) Constant 3 + 166: 39(ivec2) ConstantComposite 32 33 4(main): 2 Function None 3 5: Label 69(x0): 68(ptr) Variable Function @@ -332,9 +328,11 @@ Validation failed 164: 6(int8_t) Load 163 165: 28(ptr) AccessChain 19(b2) 21 Store 165 164 - 169: 42(ptr) AccessChain 19(b2) 32 - Store 169 168 - 171: 28(ptr) AccessChain 19(b2) 21 - Store 171 170 + 167: 7(i8vec2) SConvert 166 + 168: 42(ptr) AccessChain 19(b2) 32 + Store 168 167 + 169: 6(int8_t) SConvert 58 + 170: 28(ptr) AccessChain 19(b2) 21 + Store 170 169 Return FunctionEnd diff --git a/Test/baseResults/spv.8bitstorage-uint.frag.out b/Test/baseResults/spv.8bitstorage-uint.frag.out index 10c2b2aa..a66c6a3b 100644 --- a/Test/baseResults/spv.8bitstorage-uint.frag.out +++ b/Test/baseResults/spv.8bitstorage-uint.frag.out @@ -1,5 +1,4 @@ spv.8bitstorage-uint.frag -Validation failed // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 173 @@ -210,10 +209,8 @@ Validation failed 115: 20(int) Constant 7 116: 20(int) Constant 6 117: TypePointer Uniform 9(int) - 167: 6(int8_t) Constant 1 - 168: 6(int8_t) Constant 2 - 169: 7(i8vec2) ConstantComposite 167 168 - 171: 6(int8_t) Constant 3 + 167: 39(ivec2) ConstantComposite 82 10 + 170: 9(int) Constant 3 4(main): 2 Function None 3 5: Label 69(x0): 68(ptr) Variable Function @@ -333,8 +330,10 @@ Validation failed 165: 6(int8_t) Load 164 166: 28(ptr) AccessChain 19(b2) 21 Store 166 165 - 170: 42(ptr) AccessChain 19(b2) 32 - Store 170 169 + 168: 7(i8vec2) UConvert 167 + 169: 42(ptr) AccessChain 19(b2) 32 + Store 169 168 + 171: 6(int8_t) UConvert 170 172: 28(ptr) AccessChain 19(b2) 21 Store 172 171 Return diff --git a/Test/baseResults/spv.bufferhandle11.frag.out b/Test/baseResults/spv.bufferhandle11.frag.out index 0cc97ac2..3469715b 100644 --- a/Test/baseResults/spv.bufferhandle11.frag.out +++ b/Test/baseResults/spv.bufferhandle11.frag.out @@ -2,10 +2,9 @@ spv.bufferhandle11.frag WARNING: 0:6: '' : all default precisions are highp; use precision statements to quiet warning, e.g.: "precision mediump int; precision highp float;" -Validation failed // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 60 +// Id's are bound by 61 Capability Shader Capability StorageBuffer8BitAccess @@ -69,7 +68,7 @@ Validation failed 50: 49(ptr) Variable StorageBuffer 51: TypePointer StorageBuffer 6(int) 54: 31(int) Constant 1 - 58: 27(int8_t) Constant 9 + 58: 6(int) Constant 9 4(main): 2 Function None 3 5: Label 20(allOk): 19(ptr) Variable Function @@ -104,8 +103,9 @@ Validation failed 47: Label 56: 33(ptr) AccessChain 30 32 57: 25(ptr) Load 56 - 59: 36(ptr) AccessChain 57 32 - Store 59 58 Aligned 16 + 59: 27(int8_t) UConvert 58 + 60: 36(ptr) AccessChain 57 32 + Store 60 59 Aligned 16 Return FunctionEnd 12(compare_uint8_t(u1;u1;): 8(bool) Function None 9 diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 903a75d1..cbc9cd6e 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -654,9 +654,21 @@ enum TOperator { EOpConstructBool, EOpConstructFloat, EOpConstructDouble, + // Keep vector and matrix constructors in a consistent relative order for + // TParseContext::constructBuiltIn, which converts between 8/16/32 bit + // vector constructors EOpConstructVec2, EOpConstructVec3, EOpConstructVec4, + EOpConstructMat2x2, + EOpConstructMat2x3, + EOpConstructMat2x4, + EOpConstructMat3x2, + EOpConstructMat3x3, + EOpConstructMat3x4, + EOpConstructMat4x2, + EOpConstructMat4x3, + EOpConstructMat4x4, EOpConstructDVec2, EOpConstructDVec3, EOpConstructDVec4, @@ -687,15 +699,6 @@ enum TOperator { EOpConstructU64Vec2, EOpConstructU64Vec3, EOpConstructU64Vec4, - EOpConstructMat2x2, - EOpConstructMat2x3, - EOpConstructMat2x4, - EOpConstructMat3x2, - EOpConstructMat3x3, - EOpConstructMat3x4, - EOpConstructMat4x2, - EOpConstructMat4x3, - EOpConstructMat4x4, EOpConstructDMat2x2, EOpConstructDMat2x3, EOpConstructDMat2x4, diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index d841c905..1dd6dcef 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -574,24 +574,6 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped TOperator newOp = EOpNull; - // Certain explicit conversions are allowed conditionally - bool arithemeticInt8Enabled = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8); -#ifdef AMD_EXTENSIONS - bool arithemeticInt16Enabled = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16) || - extensionRequested(E_GL_AMD_gpu_shader_int16); - - bool arithemeticFloat16Enabled = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16) || - extensionRequested(E_GL_AMD_gpu_shader_half_float); -#else - bool arithemeticInt16Enabled = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16); - - bool arithemeticFloat16Enabled = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16); -#endif bool convertToIntTypes = (convertTo == EbtInt8 || convertTo == EbtUint8 || convertTo == EbtInt16 || convertTo == EbtUint16 || convertTo == EbtInt || convertTo == EbtUint || @@ -608,19 +590,19 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped node->getBasicType() == EbtFloat || node->getBasicType() == EbtDouble); - if (! arithemeticInt8Enabled) { + if (! getArithemeticInt8Enabled()) { if (((convertTo == EbtInt8 || convertTo == EbtUint8) && ! convertFromIntTypes) || ((node->getBasicType() == EbtInt8 || node->getBasicType() == EbtUint8) && ! convertToIntTypes)) return nullptr; } - if (! arithemeticInt16Enabled) { + if (! getArithemeticInt16Enabled()) { if (((convertTo == EbtInt16 || convertTo == EbtUint16) && ! convertFromIntTypes) || ((node->getBasicType() == EbtInt16 || node->getBasicType() == EbtUint16) && ! convertToIntTypes)) return nullptr; } - if (! arithemeticFloat16Enabled) { + if (! getArithemeticFloat16Enabled()) { if ((convertTo == EbtFloat16 && ! convertFromFloatTypes) || (node->getBasicType() == EbtFloat16 && ! convertToFloatTypes)) return nullptr; @@ -841,9 +823,15 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped newNode = addUnaryNode(newOp, node, node->getLoc(), newType); if (node->getAsConstantUnion()) { - TIntermTyped* folded = node->getAsConstantUnion()->fold(newOp, newType); - if (folded) - return folded; + // 8/16-bit storage extensions don't support 8/16-bit constants, so don't fold conversions + // to those types + if ((getArithemeticInt8Enabled() || !(convertTo == EbtInt8 || convertTo == EbtUint8)) && + (getArithemeticInt16Enabled() || !(convertTo == EbtInt16 || convertTo == EbtUint16)) && + (getArithemeticFloat16Enabled() || !(convertTo == EbtFloat16))) { + TIntermTyped* folded = node->getAsConstantUnion()->fold(newOp, newType); + if (folded) + return folded; + } } // Propagate specialization-constant-ness, if allowed diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 57cc5f9d..276f4b75 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -6948,6 +6948,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EOpConstructF16Mat4x4: case EOpConstructFloat16: basicOp = EOpConstructFloat16; + // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types, + // so construct a 32-bit type and convert + if (!intermediate.getArithemeticFloat16Enabled()) { + TType tempType(EbtFloat, EvqTemporary, type.getVectorSize()); + newNode = node; + if (tempType != newNode->getType()) + newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructVec2 + op - EOpConstructF16Vec2), tempType, node->getLoc()); + newNode = intermediate.addConversion(EbtFloat16, newNode); + return newNode; + } break; case EOpConstructI8Vec2: @@ -6955,6 +6965,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EOpConstructI8Vec4: case EOpConstructInt8: basicOp = EOpConstructInt8; + // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types, + // so construct a 32-bit type and convert + if (!intermediate.getArithemeticInt8Enabled()) { + TType tempType(EbtInt, EvqTemporary, type.getVectorSize()); + newNode = node; + if (tempType != newNode->getType()) + newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructIVec2 + op - EOpConstructI8Vec2), tempType, node->getLoc()); + newNode = intermediate.addConversion(EbtInt8, newNode); + return newNode; + } break; case EOpConstructU8Vec2: @@ -6962,6 +6982,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EOpConstructU8Vec4: case EOpConstructUint8: basicOp = EOpConstructUint8; + // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types, + // so construct a 32-bit type and convert + if (!intermediate.getArithemeticInt8Enabled()) { + TType tempType(EbtUint, EvqTemporary, type.getVectorSize()); + newNode = node; + if (tempType != newNode->getType()) + newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructUVec2 + op - EOpConstructU8Vec2), tempType, node->getLoc()); + newNode = intermediate.addConversion(EbtUint8, newNode); + return newNode; + } break; case EOpConstructI16Vec2: @@ -6969,6 +6999,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EOpConstructI16Vec4: case EOpConstructInt16: basicOp = EOpConstructInt16; + // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types, + // so construct a 32-bit type and convert + if (!intermediate.getArithemeticInt16Enabled()) { + TType tempType(EbtInt, EvqTemporary, type.getVectorSize()); + newNode = node; + if (tempType != newNode->getType()) + newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructIVec2 + op - EOpConstructI16Vec2), tempType, node->getLoc()); + newNode = intermediate.addConversion(EbtInt16, newNode); + return newNode; + } break; case EOpConstructU16Vec2: @@ -6976,6 +7016,16 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EOpConstructU16Vec4: case EOpConstructUint16: basicOp = EOpConstructUint16; + // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types, + // so construct a 32-bit type and convert + if (!intermediate.getArithemeticInt16Enabled()) { + TType tempType(EbtUint, EvqTemporary, type.getVectorSize()); + newNode = node; + if (tempType != newNode->getType()) + newNode = intermediate.setAggregateOperator(newNode, (TOperator)(EOpConstructUVec2 + op - EOpConstructU16Vec2), tempType, node->getLoc()); + newNode = intermediate.addConversion(EbtUint16, newNode); + return newNode; + } break; case EOpConstructIVec2: diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 7b8bf7ff..eb0cc7a4 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -780,6 +780,27 @@ public: const char* const implicitThisName; const char* const implicitCounterName; + // Certain explicit conversions are allowed conditionally + bool getArithemeticInt8Enabled() const { + return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || + extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8); + } + bool getArithemeticInt16Enabled() const { + return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || +#ifdef AMD_EXTENSIONS + extensionRequested(E_GL_AMD_gpu_shader_int16) || +#endif + extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16); + } + + bool getArithemeticFloat16Enabled() const { + return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || +#ifdef AMD_EXTENSIONS + extensionRequested(E_GL_AMD_gpu_shader_half_float) || +#endif + extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16); + } + protected: TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&); void error(TInfoSink& infoSink, const char*); From 91fb0091a20ac5a3838da1c61327692f4f01026c Mon Sep 17 00:00:00 2001 From: amhagan Date: Wed, 10 Jul 2019 21:14:38 -0400 Subject: [PATCH 31/42] Add support for SPV_KHR_shader_clock --- SPIRV/GLSL.ext.KHR.h | 1 + SPIRV/GlslangToSpv.cpp | 16 ++++++++++++++++ SPIRV/doc.cpp | 5 +++++ SPIRV/spirv.hpp | 2 ++ glslang/Include/intermediate.h | 4 ++++ glslang/MachineIndependent/Initialize.cpp | 22 ++++++++++++++++++++++ glslang/MachineIndependent/Versions.cpp | 3 +++ glslang/MachineIndependent/Versions.h | 2 ++ 8 files changed, 55 insertions(+) diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h index bcc6087d..1140bef5 100644 --- a/SPIRV/GLSL.ext.KHR.h +++ b/SPIRV/GLSL.ext.KHR.h @@ -42,5 +42,6 @@ static const char* const E_SPV_KHR_post_depth_coverage = "SPV_KHR_post_ static const char* const E_SPV_KHR_vulkan_memory_model = "SPV_KHR_vulkan_memory_model"; static const char* const E_SPV_EXT_physical_storage_buffer = "SPV_EXT_physical_storage_buffer"; static const char* const E_SPV_EXT_fragment_shader_interlock = "SPV_EXT_fragment_shader_interlock"; +static const char* const E_SPV_KHR_shader_clock = "SPV_KHR_shader_clock"; #endif // #ifndef GLSLextKHR_H diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 7b1393c7..73a8f6a2 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -7623,6 +7623,22 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv: return id; } + case glslang::EOpReadClockSubgroupKHR: { + std::vector args; + args.push_back(builder.makeUintConstant(spv::ScopeSubgroup)); + builder.addExtension(spv::E_SPV_KHR_shader_clock); + builder.addCapability(spv::CapabilityShaderClockKHR); + return builder.createOp(spv::OpReadClockKHR, typeId, args); + } + + case glslang::EOpReadClockDeviceKHR: { + std::vector args; + args.push_back(builder.makeUintConstant(spv::ScopeDevice)); + builder.addExtension(spv::E_SPV_KHR_shader_clock); + builder.addCapability(spv::CapabilityShaderClockKHR); + return builder.createOp(spv::OpReadClockKHR, typeId, args); + } + default: logger->missingFunctionality("unknown operation with no arguments"); return 0; diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index bd639ae4..85a3a2e9 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -959,6 +959,7 @@ const char* CapabilityString(int info) case CapabilityFragmentShaderShadingRateInterlockEXT: return "CapabilityFragmentShaderShadingRateInterlockEXT"; case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT"; + case CapabilityShaderClockKHR: return "ShaderClockKHR"; default: return "Bad"; } @@ -1349,6 +1350,8 @@ const char* OpcodeString(int op) case 5012: return "OpFragmentFetchAMD"; #endif + case OpReadClockKHR: return "OpReadClockKHR"; + case OpDecorateStringGOOGLE: return "OpDecorateStringGOOGLE"; case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE"; @@ -2790,6 +2793,8 @@ void Parameterize() InstructionDesc[OpCooperativeMatrixLengthNV].operands.push(OperandId, "'Type'"); InstructionDesc[OpDemoteToHelperInvocationEXT].setResultAndType(false, false); + + InstructionDesc[OpReadClockKHR].operands.push(OperandScope, "'Scope'"); } }; // end spv namespace diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index a584aaf8..16fb78c2 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -809,6 +809,7 @@ enum Capability { CapabilityFragmentMaskAMD = 5010, CapabilityStencilExportEXT = 5013, CapabilityImageReadWriteLodAMD = 5015, + CapabilityShaderClockKHR = 5055, CapabilitySampleMaskOverrideCoverageNV = 5249, CapabilityGeometryShaderPassthroughNV = 5251, CapabilityShaderViewportIndexLayerEXT = 5254, @@ -1219,6 +1220,7 @@ enum Op { OpGroupSMaxNonUniformAMD = 5007, OpFragmentMaskFetchAMD = 5011, OpFragmentFetchAMD = 5012, + OpReadClockKHR = 5056, OpImageSampleFootprintNV = 5283, OpGroupNonUniformPartitionNV = 5296, OpWritePackedPrimitiveIndices4x8NV = 5299, diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 903a75d1..8b55b085 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -1002,6 +1002,10 @@ enum TOperator { EOpWaveGetLaneIndex, // Will decompose to gl_SubgroupInvocationID. EOpWaveActiveCountBits, // Will decompose to subgroupBallotBitCount(subgroupBallot()). EOpWavePrefixCountBits, // Will decompose to subgroupBallotInclusiveBitCount(subgroupBallot()). + + // Shader Clock Ops + EOpReadClockSubgroupKHR, + EOpReadClockDeviceKHR, }; class TIntermTraverser; diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 35b1c745..fddb1d19 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -5090,6 +5090,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } + // GL_ARB_shader_clock & GL_EXT_shader_realtime_clock + if (profile != EEsProfile && version >= 450) { + commonBuiltins.append( + "uvec2 clock2x32ARB();" + "uint64_t clockARB();" + "uvec2 clockRealtime2x32EXT();" + "uint64_t clockRealtimeEXT();" + "\n"); + } + // GL_AMD_shader_fragment_mask if (profile != EEsProfile && version >= 450 && spvVersion.vulkan > 0) { stageBuiltins[EShLangFragment].append( @@ -8458,6 +8468,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_FragDepthEXT", 1, &E_GL_EXT_frag_depth); + symbolTable.setFunctionExtensions("clockARB", 1, &E_GL_ARB_shader_clock); + symbolTable.setFunctionExtensions("clock2x32ARB", 1, &E_GL_ARB_shader_clock); + + symbolTable.setFunctionExtensions("clockRealtimeEXT", 1, &E_GL_EXT_shader_realtime_clock); + symbolTable.setFunctionExtensions("clockRealtime2x32EXT", 1, &E_GL_EXT_shader_realtime_clock); + if (profile == EEsProfile && version < 320) { symbolTable.setVariableExtensions("gl_PrimitiveID", Num_AEP_geometry_shader, AEP_geometry_shader); symbolTable.setVariableExtensions("gl_Layer", Num_AEP_geometry_shader, AEP_geometry_shader); @@ -9272,6 +9288,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("atomicCounterDecrement", EOpAtomicCounterDecrement); symbolTable.relateToOperator("atomicCounter", EOpAtomicCounter); + symbolTable.relateToOperator("clockARB", EOpReadClockSubgroupKHR); + symbolTable.relateToOperator("clock2x32ARB", EOpReadClockSubgroupKHR); + + symbolTable.relateToOperator("clockRealtimeEXT", EOpReadClockDeviceKHR); + symbolTable.relateToOperator("clockRealtime2x32EXT", EOpReadClockDeviceKHR); + if (profile != EEsProfile && version >= 460) { symbolTable.relateToOperator("atomicCounterAdd", EOpAtomicCounterAdd); symbolTable.relateToOperator("atomicCounterSubtract", EOpAtomicCounterSubtract); diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 253f6cd4..e2519188 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -188,6 +188,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_ARB_post_depth_coverage] = EBhDisable; extensionBehavior[E_GL_ARB_shader_viewport_layer_array] = EBhDisable; extensionBehavior[E_GL_ARB_fragment_shader_interlock] = EBhDisable; + extensionBehavior[E_GL_ARB_shader_clock] = EBhDisable; extensionBehavior[E_GL_KHR_shader_subgroup_basic] = EBhDisable; extensionBehavior[E_GL_KHR_shader_subgroup_vote] = EBhDisable; @@ -285,6 +286,7 @@ void TParseVersions::initializeExtensionBehavior() // EXT extensions extensionBehavior[E_GL_EXT_device_group] = EBhDisable; extensionBehavior[E_GL_EXT_multiview] = EBhDisable; + extensionBehavior[E_GL_EXT_shader_realtime_clock] = EBhDisable; // OVR extensions extensionBehavior[E_GL_OVR_multiview] = EBhDisable; @@ -408,6 +410,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_KHR_shader_subgroup_quad 1\n" "#define E_GL_EXT_shader_atomic_int64 1\n" + "#define E_GL_EXT_shader_realtime_clock 1\n" #ifdef AMD_EXTENSIONS "#define GL_AMD_shader_ballot 1\n" diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 02d2266f..809ba746 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -142,6 +142,7 @@ const char* const E_GL_ARB_shader_stencil_export = "GL_ARB_shader_stencil const char* const E_GL_ARB_post_depth_coverage = "GL_ARB_post_depth_coverage"; const char* const E_GL_ARB_shader_viewport_layer_array = "GL_ARB_shader_viewport_layer_array"; const char* const E_GL_ARB_fragment_shader_interlock = "GL_ARB_fragment_shader_interlock"; +const char* const E_GL_ARB_shader_clock = "GL_ARB_shader_clock"; const char* const E_GL_KHR_shader_subgroup_basic = "GL_KHR_shader_subgroup_basic"; const char* const E_GL_KHR_shader_subgroup_vote = "GL_KHR_shader_subgroup_vote"; @@ -174,6 +175,7 @@ const char* const E_GL_EXT_fragment_invocation_density = "GL_EXT_fragment_i const char* const E_GL_EXT_buffer_reference = "GL_EXT_buffer_reference"; const char* const E_GL_EXT_buffer_reference2 = "GL_EXT_buffer_reference2"; const char* const E_GL_EXT_demote_to_helper_invocation = "GL_EXT_demote_to_helper_invocation"; +const char* const E_GL_EXT_shader_realtime_clock = "GL_EXT_shader_realtime_clock"; // Arrays of extensions for the above viewportEXTs duplications From bbf172b51882447e9406e7441fb30df7ec8405a0 Mon Sep 17 00:00:00 2001 From: Ryan Harrison Date: Fri, 12 Jul 2019 14:25:18 -0400 Subject: [PATCH 32/42] Explicitly remove RTTI in the top-level build config Fixes #1831 --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index acbd266b..5638fabe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -105,6 +105,8 @@ else() set(CMAKE_CXX_EXTENSIONS OFF) endif() +add_compile_options(-fno-rtti) + function(glslang_set_link_args TARGET) # For MinGW compiles, statically link against the GCC and C++ runtimes. # This avoids the need to ship those runtimes as DLLs. From dbd4c3ce11a6f08eb6cb893602b5ed7f179a300a Mon Sep 17 00:00:00 2001 From: Jason Macnak Date: Fri, 12 Jul 2019 14:33:02 -0700 Subject: [PATCH 33/42] spirv: Generate missing SampleMaskOverrideCoverageNV capability op The SampleMaskOverrideCoverageNV capability should be declared when gl_SampleMask is used. --- SPIRV/GlslangToSpv.cpp | 1 + SPIRV/disassemble.cpp | 1 + SPIRV/doc.cpp | 1 + Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out | 2 +- 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 73a8f6a2..fabaee95 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -7738,6 +7738,7 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol decoration = (spv::Decoration)spv::DecorationMax; builder.addDecoration(id, decoration); if (decoration != spv::DecorationMax) { + builder.addCapability(spv::CapabilitySampleMaskOverrideCoverageNV); builder.addExtension(spv::E_SPV_NV_sample_mask_override_coverage); } } diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp index 3269f97e..80ebac4a 100644 --- a/SPIRV/disassemble.cpp +++ b/SPIRV/disassemble.cpp @@ -734,6 +734,7 @@ static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint) case CapabilityFragmentBarycentricNV: return "FragmentBarycentricNV"; case CapabilityMeshShadingNV: return "MeshShadingNV"; case CapabilityImageFootprintNV: return "ImageFootprintNV"; + case CapabilitySampleMaskOverrideCoverageNV:return "SampleMaskOverrideCoverageNV"; // NV Decorations case DecorationOverrideCoverageNV: return "OverrideCoverageNV"; diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 85a3a2e9..ffa2af83 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -926,6 +926,7 @@ const char* CapabilityString(int info) case CapabilityMeshShadingNV: return "MeshShadingNV"; case CapabilityImageFootprintNV: return "ImageFootprintNV"; // case CapabilityShadingRateNV: return "ShadingRateNV"; // superseded by FragmentDensityEXT + case CapabilitySampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV"; #endif case CapabilityFragmentDensityEXT: return "FragmentDensityEXT"; diff --git a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out index 84b763ba..3a9872e3 100644 --- a/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out +++ b/Test/baseResults/spv.sampleMaskOverrideCoverage.frag.out @@ -1,10 +1,10 @@ spv.sampleMaskOverrideCoverage.frag -Validation failed // Module Version 10000 // Generated by (magic number): 80007 // Id's are bound by 20 Capability Shader + Capability SampleMaskOverrideCoverageNV Extension "SPV_NV_sample_mask_override_coverage" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 From 1a6e8534cef32ce855f8b97ea84ffa93152242b0 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Sat, 13 Jul 2019 12:22:10 -0600 Subject: [PATCH 34/42] GLSL: Fix #1833: Don't constant fold integer mix to a float. --- Test/310.frag | 2 +- Test/baseResults/310.frag.out | 10 ++++++++ glslang/MachineIndependent/Constant.cpp | 31 ++++++++++++++----------- 3 files changed, 28 insertions(+), 15 deletions(-) mode change 100644 => 100755 Test/310.frag mode change 100644 => 100755 glslang/MachineIndependent/Constant.cpp diff --git a/Test/310.frag b/Test/310.frag old mode 100644 new mode 100755 index a0525ea9..8a11f67a --- a/Test/310.frag +++ b/Test/310.frag @@ -58,8 +58,8 @@ void foo23() b1 = mix(b2, b3, b); uvec3 um3 = mix(uvec3(i), uvec3(i), bvec3(b)); ivec4 im4 = mix(ivec4(i), ivec4(i), bvec4(b)); + 1 << mix(1u, 1u, false); // does not require folding } - layout(binding=3) uniform sampler2D s1; layout(binding=3) uniform sampler2D s2; // ERROR: overlapping bindings? Don't see that in the 310 spec. highp layout(binding=2) uniform writeonly image2D i2D; diff --git a/Test/baseResults/310.frag.out b/Test/baseResults/310.frag.out index 6763c0a1..fab3d461 100644 --- a/Test/baseResults/310.frag.out +++ b/Test/baseResults/310.frag.out @@ -337,6 +337,16 @@ ERROR: node is still EOpNull! 0:60 'i' ( uniform mediump int) 0:60 Construct bvec4 ( temp 4-component vector of bool) 0:60 'b' ( temp bool) +0:61 left-shift ( temp int) +0:61 Constant: +0:61 1 (const int) +0:61 mix ( global uint) +0:61 Constant: +0:61 1 (const uint) +0:61 Constant: +0:61 1 (const uint) +0:61 Constant: +0:61 false (const bool) 0:98 Function Definition: foots( ( global void) 0:98 Function Parameters: 0:100 Sequence diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp old mode 100644 new mode 100755 index b75e3efb..e0f3d55a --- a/glslang/MachineIndependent/Constant.cpp +++ b/glslang/MachineIndependent/Constant.cpp @@ -415,8 +415,8 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EOpEmitStreamVertex: case EOpEndStreamPrimitive: - // These don't actually fold - return 0; + // These don't fold + return nullptr; case EOpPackSnorm2x16: case EOpPackUnorm2x16: @@ -491,8 +491,6 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) break; } - // TODO: 3.0 Functionality: unary constant folding: the rest of the ops have to be fleshed out - case EOpPackSnorm2x16: case EOpPackUnorm2x16: case EOpPackHalf2x16: @@ -510,7 +508,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EOpDeterminant: case EOpMatrixInverse: case EOpTranspose: - return 0; + return nullptr; default: assert(componentWise); @@ -538,7 +536,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EbtInt64: newConstArray[i].setI64Const(-unionArray[i].getI64Const()); break; case EbtUint64: newConstArray[i].setU64Const(static_cast(-static_cast(unionArray[i].getU64Const()))); break; default: - return 0; + return nullptr; } break; case EOpLogicalNot: @@ -546,7 +544,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) switch (getType().getBasicType()) { case EbtBool: newConstArray[i].setBConst(!unionArray[i].getBConst()); break; default: - return 0; + return nullptr; } break; case EOpBitwiseNot: @@ -970,7 +968,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EOpInt16BitsToFloat16: case EOpUint16BitsToFloat16: default: - return 0; + return nullptr; } } @@ -1201,12 +1199,17 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) newConstArray[comp].setBConst(childConstUnions[0][arg0comp] != childConstUnions[1][arg1comp]); break; case EOpMix: - if (children[2]->getAsTyped()->getBasicType() == EbtBool) - newConstArray[comp].setDConst(childConstUnions[2][arg2comp].getBConst() ? childConstUnions[1][arg1comp].getDConst() : - childConstUnions[0][arg0comp].getDConst()); - else - newConstArray[comp].setDConst(childConstUnions[0][arg0comp].getDConst() * (1.0 - childConstUnions[2][arg2comp].getDConst()) + - childConstUnions[1][arg1comp].getDConst() * childConstUnions[2][arg2comp].getDConst()); + if (!children[0]->getAsTyped()->isFloatingDomain()) + return aggrNode; + if (children[2]->getAsTyped()->getBasicType() == EbtBool) { + newConstArray[comp].setDConst(childConstUnions[2][arg2comp].getBConst() + ? childConstUnions[1][arg1comp].getDConst() + : childConstUnions[0][arg0comp].getDConst()); + } else { + newConstArray[comp].setDConst( + childConstUnions[0][arg0comp].getDConst() * (1.0 - childConstUnions[2][arg2comp].getDConst()) + + childConstUnions[1][arg1comp].getDConst() * childConstUnions[2][arg2comp].getDConst()); + } break; case EOpStep: newConstArray[comp].setDConst(childConstUnions[1][arg1comp].getDConst() < childConstUnions[0][arg0comp].getDConst() ? 0.0 : 1.0); From bb7307b4a80d4c032e68f3313f268d6e2c5debe4 Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Mon, 15 Jul 2019 14:57:20 +0800 Subject: [PATCH 35/42] OpIsHelperInvocationEXT should declare relevant SPV extension and capability --- SPIRV/GlslangToSpv.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index fabaee95..4019436a 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -7619,8 +7619,9 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv: case glslang::EOpIsHelperInvocation: { std::vector args; // Dummy arguments - spv::Id id = builder.createOp(spv::OpIsHelperInvocationEXT, typeId, args); - return id; + builder.addExtension(spv::E_SPV_EXT_demote_to_helper_invocation); + builder.addCapability(spv::CapabilityDemoteToHelperInvocationEXT); + return builder.createOp(spv::OpIsHelperInvocationEXT, typeId, args); } case glslang::EOpReadClockSubgroupKHR: { From 33081e01d368ebf1f8cbd1dad3d0827eadf3c026 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Mon, 15 Jul 2019 01:20:18 -0600 Subject: [PATCH 36/42] ESSL: Fix #1823: Conditions for when derivatives are in compute shader. --- Test/320.comp | 12 +++++ Test/baseResults/320.comp.out | 66 ++++++++++++++++++++--- glslang/MachineIndependent/Initialize.cpp | 39 +++++++------- 3 files changed, 91 insertions(+), 26 deletions(-) diff --git a/Test/320.comp b/Test/320.comp index c31b047f..5b389959 100644 --- a/Test/320.comp +++ b/Test/320.comp @@ -1,5 +1,17 @@ #version 320 es + +float fX; +float fY; void main() { + dFdx(fX); + dFdy(fY); + fwidth(fX); + dFdxCoarse(fX); + dFdyCoarse(fY); + fwidthCoarse(fX); + dFdxFine(fX); + dFdyFine(fY); + fwidthFine(fX); } diff --git a/Test/baseResults/320.comp.out b/Test/baseResults/320.comp.out index 09cedd0a..00865be4 100644 --- a/Test/baseResults/320.comp.out +++ b/Test/baseResults/320.comp.out @@ -1,10 +1,43 @@ 320.comp +ERROR: 0:8: 'dFdx' : required extension not requested: GL_NV_compute_shader_derivatives +ERROR: 0:9: 'dFdy' : required extension not requested: GL_NV_compute_shader_derivatives +ERROR: 0:10: 'fwidth' : required extension not requested: GL_NV_compute_shader_derivatives +ERROR: 0:11: 'dFdxCoarse' : required extension not requested: GL_NV_compute_shader_derivatives +ERROR: 0:12: 'dFdyCoarse' : required extension not requested: GL_NV_compute_shader_derivatives +ERROR: 0:13: 'fwidthCoarse' : required extension not requested: GL_NV_compute_shader_derivatives +ERROR: 0:14: 'dFdxFine' : required extension not requested: GL_NV_compute_shader_derivatives +ERROR: 0:15: 'dFdyFine' : required extension not requested: GL_NV_compute_shader_derivatives +ERROR: 0:16: 'fwidthFine' : required extension not requested: GL_NV_compute_shader_derivatives +ERROR: 9 compilation errors. No code generated. + + Shader version: 320 local_size = (1, 1, 1) -0:? Sequence -0:3 Function Definition: main( ( global void) -0:3 Function Parameters: +ERROR: node is still EOpNull! +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:8 Sequence +0:8 dPdx ( global highp float) +0:8 'fX' ( global highp float) +0:9 dPdy ( global highp float) +0:9 'fY' ( global highp float) +0:10 fwidth ( global highp float) +0:10 'fX' ( global highp float) +0:11 dPdxCoarse ( global highp float) +0:11 'fX' ( global highp float) +0:12 dPdyCoarse ( global highp float) +0:12 'fY' ( global highp float) +0:13 fwidthCoarse ( global highp float) +0:13 'fX' ( global highp float) +0:14 dPdxFine ( global highp float) +0:14 'fX' ( global highp float) +0:15 dPdyFine ( global highp float) +0:15 'fY' ( global highp float) +0:16 fwidthFine ( global highp float) +0:16 'fX' ( global highp float) 0:? Linker Objects +0:? 'fX' ( global highp float) +0:? 'fY' ( global highp float) Linked compute stage: @@ -12,8 +45,29 @@ Linked compute stage: Shader version: 320 local_size = (1, 1, 1) -0:? Sequence -0:3 Function Definition: main( ( global void) -0:3 Function Parameters: +ERROR: node is still EOpNull! +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:8 Sequence +0:8 dPdx ( global highp float) +0:8 'fX' ( global highp float) +0:9 dPdy ( global highp float) +0:9 'fY' ( global highp float) +0:10 fwidth ( global highp float) +0:10 'fX' ( global highp float) +0:11 dPdxCoarse ( global highp float) +0:11 'fX' ( global highp float) +0:12 dPdyCoarse ( global highp float) +0:12 'fY' ( global highp float) +0:13 fwidthCoarse ( global highp float) +0:13 'fX' ( global highp float) +0:14 dPdxFine ( global highp float) +0:14 'fX' ( global highp float) +0:15 dPdyFine ( global highp float) +0:15 'fY' ( global highp float) +0:16 fwidthFine ( global highp float) +0:16 'fX' ( global highp float) 0:? Linker Objects +0:? 'fX' ( global highp float) +0:? 'fY' ( global highp float) diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index fddb1d19..3d3e1087 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -5144,14 +5144,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV } //E_SPV_NV_compute_shader_derivatives - - stageBuiltins[EShLangCompute].append(derivatives); - stageBuiltins[EShLangCompute].append(derivativeControls); - stageBuiltins[EShLangCompute].append("\n"); - - + if (profile == EEsProfile && version >= 320 || profile != EEsProfile && version >= 450) { + stageBuiltins[EShLangCompute].append(derivatives); + stageBuiltins[EShLangCompute].append(derivativeControls); + stageBuiltins[EShLangCompute].append("\n"); + } if (profile != EEsProfile && version >= 450) { - stageBuiltins[EShLangCompute].append(derivativesAndControl16bits); stageBuiltins[EShLangCompute].append(derivativesAndControl64bits); stageBuiltins[EShLangCompute].append("\n"); @@ -8443,19 +8441,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_BaryCoordNV", EbvBaryCoordNV, symbolTable); BuiltInVariable("gl_BaryCoordNoPerspNV", EbvBaryCoordNoPerspNV, symbolTable); } - if (((profile != EEsProfile && version >= 450) || - (profile == EEsProfile && version >= 320)) && - language == EShLangCompute) { - symbolTable.setFunctionExtensions("dFdx", 1, &E_GL_NV_compute_shader_derivatives); - symbolTable.setFunctionExtensions("dFdy", 1, &E_GL_NV_compute_shader_derivatives); - symbolTable.setFunctionExtensions("fwidth", 1, &E_GL_NV_compute_shader_derivatives); - symbolTable.setFunctionExtensions("dFdxFine", 1, &E_GL_NV_compute_shader_derivatives); - symbolTable.setFunctionExtensions("dFdyFine", 1, &E_GL_NV_compute_shader_derivatives); - symbolTable.setFunctionExtensions("fwidthFine", 1, &E_GL_NV_compute_shader_derivatives); - symbolTable.setFunctionExtensions("dFdxCoarse", 1, &E_GL_NV_compute_shader_derivatives); - symbolTable.setFunctionExtensions("dFdyCoarse", 1, &E_GL_NV_compute_shader_derivatives); - symbolTable.setFunctionExtensions("fwidthCoarse", 1, &E_GL_NV_compute_shader_derivatives); - } #endif if ((profile != EEsProfile && version >= 450) || @@ -8774,6 +8759,20 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("coopMatStoreNV", 1, &E_GL_NV_cooperative_matrix); symbolTable.setFunctionExtensions("coopMatMulAddNV", 1, &E_GL_NV_cooperative_matrix); +#ifdef NV_EXTENSIONS + if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { + symbolTable.setFunctionExtensions("dFdx", 1, &E_GL_NV_compute_shader_derivatives); + symbolTable.setFunctionExtensions("dFdy", 1, &E_GL_NV_compute_shader_derivatives); + symbolTable.setFunctionExtensions("fwidth", 1, &E_GL_NV_compute_shader_derivatives); + symbolTable.setFunctionExtensions("dFdxFine", 1, &E_GL_NV_compute_shader_derivatives); + symbolTable.setFunctionExtensions("dFdyFine", 1, &E_GL_NV_compute_shader_derivatives); + symbolTable.setFunctionExtensions("fwidthFine", 1, &E_GL_NV_compute_shader_derivatives); + symbolTable.setFunctionExtensions("dFdxCoarse", 1, &E_GL_NV_compute_shader_derivatives); + symbolTable.setFunctionExtensions("dFdyCoarse", 1, &E_GL_NV_compute_shader_derivatives); + symbolTable.setFunctionExtensions("fwidthCoarse", 1, &E_GL_NV_compute_shader_derivatives); + } +#endif + break; #ifdef NV_EXTENSIONS case EShLangRayGenNV: From f2dcc87c6aa5a9ded87edb15119d73677f83f3ea Mon Sep 17 00:00:00 2001 From: Sahil Parmar Date: Mon, 15 Jul 2019 16:05:18 -0700 Subject: [PATCH 37/42] Allow unsized view array dimension for non-block perviewNV attributes --- .../spv.meshShaderPerViewUserDefined.mesh.out | 50 ++++++++++++++++++- .../spv.meshShaderPerView_Errors.mesh.out | 11 ++++ Test/spv.meshShaderPerViewUserDefined.mesh | 20 ++++++-- Test/spv.meshShaderPerView_Errors.mesh | 32 ++++++++++++ glslang/MachineIndependent/ParseHelper.cpp | 36 +++++++------ glslang/MachineIndependent/ParseHelper.h | 2 +- gtests/Spv.FromFile.cpp | 1 + 7 files changed, 131 insertions(+), 21 deletions(-) create mode 100644 Test/baseResults/spv.meshShaderPerView_Errors.mesh.out create mode 100644 Test/spv.meshShaderPerView_Errors.mesh diff --git a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out index 7e7a37db..266f662d 100644 --- a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out +++ b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out @@ -1,13 +1,13 @@ spv.meshShaderPerViewUserDefined.mesh // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 90 +// Id's are bound by 108 Capability MeshShadingNV Extension "SPV_NV_mesh_shader" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint MeshNV 4 "main" 11 20 21 35 67 + EntryPoint MeshNV 4 "main" 11 20 21 35 67 92 95 96 97 102 105 106 107 ExecutionMode 4 LocalSize 32 1 1 ExecutionMode 4 OutputVertices 81 ExecutionMode 4 OutputPrimitivesNV 32 @@ -32,6 +32,14 @@ spv.meshShaderPerViewUserDefined.mesh MemberName 64(perviewBlock) 2 "color7" MemberName 64(perviewBlock) 3 "color8" Name 67 "b2" + Name 92 "nonBlk1" + Name 95 "nonBlk2" + Name 96 "nonBlk3" + Name 97 "nonBlk4" + Name 102 "nonBlkArr1" + Name 105 "nonBlkArr2" + Name 106 "nonBlkArr3" + Name 107 "nonBlkArr4" Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 20(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV Decorate 21(gl_MeshViewCountNV) BuiltIn MeshViewCountNV @@ -50,6 +58,26 @@ spv.meshShaderPerViewUserDefined.mesh Decorate 64(perviewBlock) Block Decorate 67(b2) Location 10 Decorate 89 BuiltIn WorkgroupSize + Decorate 92(nonBlk1) PerViewNV + Decorate 92(nonBlk1) Location 18 + Decorate 95(nonBlk2) PerPrimitiveNV + Decorate 95(nonBlk2) PerViewNV + Decorate 95(nonBlk2) Location 19 + Decorate 96(nonBlk3) PerViewNV + Decorate 96(nonBlk3) Location 20 + Decorate 97(nonBlk4) PerPrimitiveNV + Decorate 97(nonBlk4) PerViewNV + Decorate 97(nonBlk4) Location 21 + Decorate 102(nonBlkArr1) PerViewNV + Decorate 102(nonBlkArr1) Location 22 + Decorate 105(nonBlkArr2) PerPrimitiveNV + Decorate 105(nonBlkArr2) PerViewNV + Decorate 105(nonBlkArr2) Location 24 + Decorate 106(nonBlkArr3) PerViewNV + Decorate 106(nonBlkArr3) Location 26 + Decorate 107(nonBlkArr4) PerPrimitiveNV + Decorate 107(nonBlkArr4) PerViewNV + Decorate 107(nonBlkArr4) Location 28 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -106,6 +134,24 @@ spv.meshShaderPerViewUserDefined.mesh 86: 27(fvec4) ConstantComposite 85 85 85 85 88: 6(int) Constant 32 89: 9(ivec3) ConstantComposite 88 60 60 + 90: TypeArray 63 32 + 91: TypePointer Output 90 + 92(nonBlk1): 91(ptr) Variable Output + 93: TypeArray 63 88 + 94: TypePointer Output 93 + 95(nonBlk2): 94(ptr) Variable Output + 96(nonBlk3): 91(ptr) Variable Output + 97(nonBlk4): 94(ptr) Variable Output + 98: TypeArray 27(fvec4) 62 + 99: TypeArray 98 17 + 100: TypeArray 99 32 + 101: TypePointer Output 100 + 102(nonBlkArr1): 101(ptr) Variable Output + 103: TypeArray 99 88 + 104: TypePointer Output 103 + 105(nonBlkArr2): 104(ptr) Variable Output + 106(nonBlkArr3): 101(ptr) Variable Output + 107(nonBlkArr4): 104(ptr) Variable Output 4(main): 2 Function None 3 5: Label 8(iid): 7(ptr) Variable Function diff --git a/Test/baseResults/spv.meshShaderPerView_Errors.mesh.out b/Test/baseResults/spv.meshShaderPerView_Errors.mesh.out new file mode 100644 index 00000000..aa0b99ee --- /dev/null +++ b/Test/baseResults/spv.meshShaderPerView_Errors.mesh.out @@ -0,0 +1,11 @@ +spv.meshShaderPerView_Errors.mesh +ERROR: 0:19: '[]' : only outermost dimension of an array of arrays can be implicitly sized +ERROR: 0:20: '[]' : mesh view output array size must be gl_MaxMeshViewCountNV or implicitly sized +ERROR: 0:21: 'perviewNV' : requires a view array dimension +ERROR: 0:25: '[]' : only outermost dimension of an array of arrays can be implicitly sized +ERROR: 0:26: '[]' : mesh view output array size must be gl_MaxMeshViewCountNV or implicitly sized +ERROR: 0:27: 'perviewNV' : requires a view array dimension +ERROR: 6 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/spv.meshShaderPerViewUserDefined.mesh b/Test/spv.meshShaderPerViewUserDefined.mesh index 4a316eb2..262504dd 100644 --- a/Test/spv.meshShaderPerViewUserDefined.mesh +++ b/Test/spv.meshShaderPerViewUserDefined.mesh @@ -22,18 +22,30 @@ layout(triangles) out; layout(location=0) out block { perprimitiveNV perviewNV vec4 color1[][3]; // Implicitly sized perprimitiveNV vec4 color2[3]; - perviewNV vec4 color3[MAX_VIEWS][3]; // Explicitly sized + perviewNV vec4 color3[MAX_VIEWS][3]; // Explicitly sized vec4 color4; } b[]; -// per-view block +// per-view block attributes perviewNV layout(location=10) out perviewBlock { perprimitiveNV vec4 color5[]; // Implicitly sized perprimitiveNV vec4 color6[MAX_VIEWS][3]; // Explicitly sized - vec4 color7[][3]; // Implicitly sized - vec4 color8[MAX_VIEWS]; // Explicitly sized + vec4 color7[][3]; // Implicitly sized + vec4 color8[MAX_VIEWS]; // Explicitly sized } b2[]; +// per-view non-block attributes +perviewNV layout(location=18) out vec4 nonBlk1[MAX_VER][MAX_VIEWS]; // Explicit+Explicit +perviewNV perprimitiveNV layout(location=19) out vec4 nonBlk2[MAX_PRIM][]; // Explicit+Implicit +perviewNV layout(location=20) out vec4 nonBlk3[][MAX_VIEWS]; // Implicit+Explicit +perviewNV perprimitiveNV layout(location=21) out vec4 nonBlk4[][]; // Implicit+Implicit + +// per-view non-block array attributes +perviewNV layout(location=22) out vec4 nonBlkArr1[MAX_VER][MAX_VIEWS][2]; // Explicit+Explicit +perviewNV perprimitiveNV layout(location=24) out vec4 nonBlkArr2[MAX_PRIM][][2]; // Explicit+Implicit +perviewNV layout(location=26) out vec4 nonBlkArr3[][MAX_VIEWS][2]; // Implicit+Explicit +perviewNV perprimitiveNV layout(location=28) out vec4 nonBlkArr4[][][2]; // Implicit+Implicit + void main() { uint iid = gl_LocalInvocationID.x; diff --git a/Test/spv.meshShaderPerView_Errors.mesh b/Test/spv.meshShaderPerView_Errors.mesh new file mode 100644 index 00000000..77190ef0 --- /dev/null +++ b/Test/spv.meshShaderPerView_Errors.mesh @@ -0,0 +1,32 @@ +#version 450 + +#define MAX_VER 81 +#define MAX_PRIM 32 +#define MAX_VIEWS gl_MaxMeshViewCountNV + +#extension GL_NV_mesh_shader : enable + +layout(local_size_x = 32) in; + +layout(max_vertices=MAX_VER) out; +layout(max_primitives=MAX_PRIM) out; +layout(triangles) out; + +// test error checks for use of incorrect per-view attributes + +// per-view block attributes +perviewNV layout(location=0) out perviewBlock { + vec4 missingInnermostDimSize1[][]; + vec4 incorrectViewDimSize1[MAX_VIEWS+1]; + vec4 missingViewDim1; +} b2[]; + +// per-view non-block attributes +perviewNV layout(location=10) out vec4 missingInnermostDimSize2[][][]; +perviewNV layout(location=11) out vec4 incorrectViewDimSize2[][MAX_VIEWS-1]; +perviewNV layout(location=12) out vec4 missingViewDim2[]; + +void main() +{ +} + diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 276f4b75..6df25f0e 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -3976,23 +3976,30 @@ bool TParseContext::isRuntimeLength(const TIntermTyped& base) const } #ifdef NV_EXTENSIONS -// Fix mesh view output array dimension -void TParseContext::resizeMeshViewDimension(const TSourceLoc& loc, TType& type) +// Check if mesh perviewNV attributes have a view dimension +// and resize it to gl_MaxMeshViewCountNV when implicitly sized. +void TParseContext::checkAndResizeMeshViewDim(const TSourceLoc& loc, TType& type, bool isBlockMember) { // see if member is a per-view attribute - if (type.getQualifier().isPerView()) { - // since we don't have the maxMeshViewCountNV set during parsing builtins, we hardcode the value - int maxViewCount = parsingBuiltins ? 4 : resources.maxMeshViewCountNV; + if (!type.getQualifier().isPerView()) + return; - if (! type.isArray()) { - error(loc, "requires an view array dimension", "perviewNV", ""); - } - else if (!type.isUnsizedArray() && type.getOuterArraySize() != maxViewCount) { + if ((isBlockMember && type.isArray()) || (!isBlockMember && type.isArrayOfArrays())) { + // since we don't have the maxMeshViewCountNV set during parsing builtins, we hardcode the value. + int maxViewCount = parsingBuiltins ? 4 : resources.maxMeshViewCountNV; + // For block members, outermost array dimension is the view dimension. + // For non-block members, outermost array dimension is the vertex/primitive dimension + // and 2nd outermost is the view dimension. + int viewDim = isBlockMember ? 0 : 1; + int viewDimSize = type.getArraySizes()->getDimSize(viewDim); + + if (viewDimSize != UnsizedArraySize && viewDimSize != maxViewCount) error(loc, "mesh view output array size must be gl_MaxMeshViewCountNV or implicitly sized", "[]", ""); - } - else if (type.isUnsizedArray()) { - type.changeOuterArraySize(maxViewCount); - } + else if (viewDimSize == UnsizedArraySize) + type.getArraySizes()->setDimSize(viewDim, maxViewCount); + } + else { + error(loc, "requires a view array dimension", "perviewNV", ""); } } #endif @@ -6427,6 +6434,7 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden transparentOpaqueCheck(loc, type, identifier); #ifdef NV_EXTENSIONS accStructNVCheck(loc, type, identifier); + checkAndResizeMeshViewDim(loc, type, /*isBlockMember*/ false); #endif if (type.getQualifier().storage == EvqConst && type.containsBasicType(EbtReference)) { error(loc, "variables with reference type can't have qualifier 'const'", "qualifier", ""); @@ -7342,7 +7350,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con #ifdef NV_EXTENSIONS if (memberWithPerViewQualifier) { for (unsigned int member = 0; member < typeList.size(); ++member) { - resizeMeshViewDimension(typeList[member].loc, *typeList[member].type); + checkAndResizeMeshViewDim(typeList[member].loc, *typeList[member].type, /*isBlockMember*/ true); } } #endif diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index 04ede1e3..3619437c 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -429,7 +429,7 @@ public: // Determine loop control from attributes void handleLoopAttributes(const TAttributes& attributes, TIntermNode*); - void resizeMeshViewDimension(const TSourceLoc&, TType&); + void checkAndResizeMeshViewDim(const TSourceLoc&, TType&, bool isBlockMember); protected: void nonInitConstCheck(const TSourceLoc&, TString& identifier, TType& type); diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 167adaa0..e630f56f 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -625,6 +625,7 @@ INSTANTIATE_TEST_CASE_P( "spv.meshShaderUserDefined.mesh", "spv.meshShaderPerViewBuiltins.mesh", "spv.meshShaderPerViewUserDefined.mesh", + "spv.meshShaderPerView_Errors.mesh", "spv.meshShaderSharedMem.mesh", "spv.meshShaderTaskMem.mesh", "spv.320.meshShaderUserDefined.mesh", From ea5715ca7ff559d4d95a91843746805a0cdd7aae Mon Sep 17 00:00:00 2001 From: Jason Macnak Date: Tue, 16 Jul 2019 09:39:54 -0700 Subject: [PATCH 38/42] Update known good SPIRV-Tools commit Update the known good SPIRV-Tools commit to eventually propagate the commit allowing the ray tracing stages in pass instrumentation to the vulkan validation layers (validation layers depends on glslang which depends on spirv-tools). --- known_good.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/known_good.json b/known_good.json index 707fcace..800e649a 100644 --- a/known_good.json +++ b/known_good.json @@ -5,7 +5,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "456cc598afb6d7c264f20cd3a183d85e369bed9a" + "commit" : "1fedf72e500b7cf72098a3f800c8ef4b9d9dc84f" }, { "name" : "spirv-tools/external/spirv-headers", From 9f2236e58ed06c770a6beffe8a3b6b4a32111c42 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Wed, 17 Jul 2019 19:15:47 -0600 Subject: [PATCH 39/42] Build: shut up warning to add unnecessary parens. --- glslang/MachineIndependent/Initialize.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 3d3e1087..602bf850 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -5144,7 +5144,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV } //E_SPV_NV_compute_shader_derivatives - if (profile == EEsProfile && version >= 320 || profile != EEsProfile && version >= 450) { + if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450)) { stageBuiltins[EShLangCompute].append(derivatives); stageBuiltins[EShLangCompute].append(derivativeControls); stageBuiltins[EShLangCompute].append("\n"); From 38317065f641deff5f88906c7eaac001fac8ec4f Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 18 Jul 2019 13:53:09 -0600 Subject: [PATCH 40/42] Update spirv-tools and spirv-headers known good. Previous known-good contained regression per sperron at Google. --- known_good.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/known_good.json b/known_good.json index 800e649a..03818797 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "1fedf72e500b7cf72098a3f800c8ef4b9d9dc84f" + "commit" : "aa9e8f538041db3055ea443080e0ccc315fa114f" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "123dc278f204f8e833e1a88d31c46d0edf81d4b2" + "commit" : "45c2cc37276d69e5b257507d97fd90d2a5684ccc" } ] } From 2bb2da919352bed58e73f39f62f24570dfefb60b Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Mon, 22 Jul 2019 07:06:50 -0600 Subject: [PATCH 41/42] SPV: Update to latest SPIR-V header. --- SPIRV/spirv.hpp | 9 +++++---- glslang/Include/revision.h | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index 16fb78c2..59fdecee 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -1753,6 +1753,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; case OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break; case OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break; + case OpReadClockKHR: *hasResult = true; *hasResultType = true; break; case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break; case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break; case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break; @@ -1767,6 +1768,10 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break; case OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break; case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break; + case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; + case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; + case OpDemoteToHelperInvocationEXT: *hasResult = false; *hasResultType = false; break; + case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break; case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break; case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break; @@ -1911,10 +1916,6 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break; case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break; case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break; - case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case OpDemoteToHelperInvocationEXT: *hasResult = false; *hasResultType = false; break; - case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; } } #endif /* SPV_ENABLE_UTILITY_CODE */ diff --git a/glslang/Include/revision.h b/glslang/Include/revision.h index 95ce7600..7afa37b0 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 3294 +#define GLSLANG_PATCH_LEVEL 3321 From c1e61d6cff30f9a1456090adfc461d976091f52f Mon Sep 17 00:00:00 2001 From: Ashwin Lele Date: Mon, 22 Jul 2019 12:36:38 -0700 Subject: [PATCH 42/42] Fix bugs in missing Builtin decoration for some NV builtins for tessellation control shaders. Fix bug in member remapping. --- SPIRV/GlslangToSpv.cpp | 7 +++-- Test/baseResults/310.tesc.out | 20 +++++++------- Test/baseResults/310.tese.out | 16 ++++++------ Test/baseResults/320.tesc.out | 20 +++++++------- Test/baseResults/320.tese.out | 16 ++++++------ .../spv.multiviewPerViewAttributes.tesc.out | 16 +++++++----- .../spv.stereoViewRendering.tesc.out | 26 +++++++++++-------- Test/spv.multiviewPerViewAttributes.tesc | 2 +- Test/spv.stereoViewRendering.tesc | 2 +- glslang/MachineIndependent/Initialize.cpp | 10 ++++++- 10 files changed, 77 insertions(+), 58 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 4019436a..24c7232b 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -3503,9 +3503,12 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy memberRemapper[glslangMembers][i] = -1; } else { if (type.getBasicType() == glslang::EbtBlock) { - memberRemapper[glslangMembers][i] = i - memberDelta; - if (filterMember(glslangMember)) + if (filterMember(glslangMember)) { + memberDelta++; + memberRemapper[glslangMembers][i] = -1; continue; + } + memberRemapper[glslangMembers][i] = i - memberDelta; } // modify just this child's view of the qualifier glslang::TQualifier memberQualifier = glslangMember.getQualifier(); diff --git a/Test/baseResults/310.tesc.out b/Test/baseResults/310.tesc.out index ef78bf38..25ce6ee9 100644 --- a/Test/baseResults/310.tesc.out +++ b/Test/baseResults/310.tesc.out @@ -72,8 +72,8 @@ ERROR: node is still EOpNull! 0:25 move second child to first child ( temp highp 4-component vector of float) 0:25 'p' ( temp highp 4-component vector of float) 0:25 gl_Position: direct index for structure ( in highp 4-component vector of float Position) -0:25 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:25 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:25 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:25 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:25 Constant: 0:25 1 (const int) 0:25 Constant: @@ -82,8 +82,8 @@ ERROR: node is still EOpNull! 0:26 move second child to first child ( temp highp float) 0:26 'ps' ( temp highp float) 0:26 gl_PointSize: direct index for structure ( in highp float PointSize) -0:26 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:26 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:26 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:26 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:26 Constant: 0:26 1 (const int) 0:26 Constant: @@ -211,8 +211,8 @@ ERROR: node is still EOpNull! 0:114 move second child to first child ( temp highp float) 0:114 'ps' ( temp highp float) 0:114 gl_PointSize: direct index for structure ( in highp float PointSize) -0:114 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:114 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:114 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:114 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:114 Constant: 0:114 1 (const int) 0:114 Constant: @@ -442,8 +442,8 @@ ERROR: node is still EOpNull! 0:25 move second child to first child ( temp highp 4-component vector of float) 0:25 'p' ( temp highp 4-component vector of float) 0:25 gl_Position: direct index for structure ( in highp 4-component vector of float Position) -0:25 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:25 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:25 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:25 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:25 Constant: 0:25 1 (const int) 0:25 Constant: @@ -452,8 +452,8 @@ ERROR: node is still EOpNull! 0:26 move second child to first child ( temp highp float) 0:26 'ps' ( temp highp float) 0:26 gl_PointSize: direct index for structure ( in highp float PointSize) -0:26 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:26 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:26 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:26 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:26 Constant: 0:26 1 (const int) 0:26 Constant: diff --git a/Test/baseResults/310.tese.out b/Test/baseResults/310.tese.out index 9c7c679d..2f23d9ba 100644 --- a/Test/baseResults/310.tese.out +++ b/Test/baseResults/310.tese.out @@ -76,8 +76,8 @@ ERROR: node is still EOpNull! 0:36 move second child to first child ( temp highp 4-component vector of float) 0:36 'p' ( temp highp 4-component vector of float) 0:36 gl_Position: direct index for structure ( in highp 4-component vector of float Position) -0:36 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:36 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:36 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:36 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:36 Constant: 0:36 1 (const int) 0:36 Constant: @@ -86,8 +86,8 @@ ERROR: node is still EOpNull! 0:37 move second child to first child ( temp highp float) 0:37 'ps' ( temp highp float) 0:37 gl_PointSize: direct index for structure ( in highp float PointSize) -0:37 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:37 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:37 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:37 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:37 Constant: 0:37 1 (const int) 0:37 Constant: @@ -209,8 +209,8 @@ ERROR: node is still EOpNull! 0:36 move second child to first child ( temp highp 4-component vector of float) 0:36 'p' ( temp highp 4-component vector of float) 0:36 gl_Position: direct index for structure ( in highp 4-component vector of float Position) -0:36 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:36 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:36 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:36 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:36 Constant: 0:36 1 (const int) 0:36 Constant: @@ -219,8 +219,8 @@ ERROR: node is still EOpNull! 0:37 move second child to first child ( temp highp float) 0:37 'ps' ( temp highp float) 0:37 gl_PointSize: direct index for structure ( in highp float PointSize) -0:37 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:37 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:37 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:37 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:37 Constant: 0:37 1 (const int) 0:37 Constant: diff --git a/Test/baseResults/320.tesc.out b/Test/baseResults/320.tesc.out index 4bb6fc28..6bb52b30 100644 --- a/Test/baseResults/320.tesc.out +++ b/Test/baseResults/320.tesc.out @@ -66,8 +66,8 @@ ERROR: node is still EOpNull! 0:23 move second child to first child ( temp highp 4-component vector of float) 0:23 'p' ( temp highp 4-component vector of float) 0:23 gl_Position: direct index for structure ( in highp 4-component vector of float Position) -0:23 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:23 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:23 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:23 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:23 Constant: 0:23 1 (const int) 0:23 Constant: @@ -76,8 +76,8 @@ ERROR: node is still EOpNull! 0:24 move second child to first child ( temp highp float) 0:24 'ps' ( temp highp float) 0:24 gl_PointSize: direct index for structure ( in highp float PointSize) -0:24 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:24 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:24 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:24 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:24 Constant: 0:24 1 (const int) 0:24 Constant: @@ -196,8 +196,8 @@ ERROR: node is still EOpNull! 0:104 move second child to first child ( temp highp float) 0:104 'ps' ( temp highp float) 0:104 gl_PointSize: direct index for structure ( in highp float PointSize) -0:104 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:104 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:104 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:104 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:104 Constant: 0:104 1 (const int) 0:104 Constant: @@ -424,8 +424,8 @@ ERROR: node is still EOpNull! 0:23 move second child to first child ( temp highp 4-component vector of float) 0:23 'p' ( temp highp 4-component vector of float) 0:23 gl_Position: direct index for structure ( in highp 4-component vector of float Position) -0:23 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:23 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:23 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:23 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:23 Constant: 0:23 1 (const int) 0:23 Constant: @@ -434,8 +434,8 @@ ERROR: node is still EOpNull! 0:24 move second child to first child ( temp highp float) 0:24 'ps' ( temp highp float) 0:24 gl_PointSize: direct index for structure ( in highp float PointSize) -0:24 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:24 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:24 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:24 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:24 Constant: 0:24 1 (const int) 0:24 Constant: diff --git a/Test/baseResults/320.tese.out b/Test/baseResults/320.tese.out index 93165ae1..014eeb0a 100644 --- a/Test/baseResults/320.tese.out +++ b/Test/baseResults/320.tese.out @@ -66,8 +66,8 @@ ERROR: node is still EOpNull! 0:32 move second child to first child ( temp highp 4-component vector of float) 0:32 'p' ( temp highp 4-component vector of float) 0:32 gl_Position: direct index for structure ( in highp 4-component vector of float Position) -0:32 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:32 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:32 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:32 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:32 Constant: 0:32 1 (const int) 0:32 Constant: @@ -76,8 +76,8 @@ ERROR: node is still EOpNull! 0:33 move second child to first child ( temp highp float) 0:33 'ps' ( temp highp float) 0:33 gl_PointSize: direct index for structure ( in highp float PointSize) -0:33 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:33 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:33 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:33 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:33 Constant: 0:33 1 (const int) 0:33 Constant: @@ -184,8 +184,8 @@ ERROR: node is still EOpNull! 0:32 move second child to first child ( temp highp 4-component vector of float) 0:32 'p' ( temp highp 4-component vector of float) 0:32 gl_Position: direct index for structure ( in highp 4-component vector of float Position) -0:32 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:32 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:32 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:32 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:32 Constant: 0:32 1 (const int) 0:32 Constant: @@ -194,8 +194,8 @@ ERROR: node is still EOpNull! 0:33 move second child to first child ( temp highp float) 0:33 'ps' ( temp highp float) 0:33 gl_PointSize: direct index for structure ( in highp float PointSize) -0:33 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) -0:33 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float gl_PositionPerViewNV}) +0:33 direct index ( temp block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:33 'gl_in' ( in 32-element array of block{ in highp 4-component vector of float Position gl_Position, in highp float PointSize gl_PointSize, in highp 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of highp 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) 0:33 Constant: 0:33 1 (const int) 0:33 Constant: diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out index 16bea3db..c06a890b 100644 --- a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out +++ b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out @@ -1,8 +1,7 @@ spv.multiviewPerViewAttributes.tesc -Validation failed // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 37 +// Id's are bound by 41 Capability Tessellation Capability PerViewAttributesNV @@ -24,7 +23,7 @@ Validation failed MemberName 27(gl_PerVertex) 1 "gl_PointSize" MemberName 27(gl_PerVertex) 2 "gl_ClipDistance" MemberName 27(gl_PerVertex) 3 "gl_CullDistance" - MemberName 27(gl_PerVertex) 5 "gl_PositionPerViewNV" + MemberName 27(gl_PerVertex) 4 "gl_PositionPerViewNV" Name 31 "gl_in" MemberDecorate 13(gl_PerVertex) 0 BuiltIn PositionPerViewNV MemberDecorate 13(gl_PerVertex) 1 BuiltIn ViewportMaskPerViewNV @@ -34,6 +33,7 @@ Validation failed MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance + MemberDecorate 27(gl_PerVertex) 4 BuiltIn PositionPerViewNV Decorate 27(gl_PerVertex) Block 2: TypeVoid 3: TypeFunction 2 @@ -61,7 +61,8 @@ Validation failed 30: TypePointer Input 29 31(gl_in): 30(ptr) Variable Input 32: TypePointer Input 7(fvec4) - 35: TypePointer Output 7(fvec4) + 35: 11(int) Constant 4 + 39: TypePointer Output 7(fvec4) 4(main): 2 Function None 3 5: Label 20: 11(int) Load 19(gl_InvocationID) @@ -70,7 +71,10 @@ Validation failed 25: 11(int) Load 19(gl_InvocationID) 33: 32(ptr) AccessChain 31(gl_in) 21 22 34: 7(fvec4) Load 33 - 36: 35(ptr) AccessChain 17(gl_out) 25 22 22 - Store 36 34 + 36: 32(ptr) AccessChain 31(gl_in) 21 35 22 + 37: 7(fvec4) Load 36 + 38: 7(fvec4) FAdd 34 37 + 40: 39(ptr) AccessChain 17(gl_out) 25 22 22 + Store 40 38 Return FunctionEnd diff --git a/Test/baseResults/spv.stereoViewRendering.tesc.out b/Test/baseResults/spv.stereoViewRendering.tesc.out index 03b20f95..43afff97 100644 --- a/Test/baseResults/spv.stereoViewRendering.tesc.out +++ b/Test/baseResults/spv.stereoViewRendering.tesc.out @@ -1,8 +1,7 @@ spv.stereoViewRendering.tesc -Validation failed // Module Version 10000 // Generated by (magic number): 80007 -// Id's are bound by 38 +// Id's are bound by 42 Capability Geometry Capability Tessellation @@ -14,7 +13,7 @@ Validation failed Extension "SPV_NV_viewport_array2" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint TessellationControl 4 "main" 16 18 31 37 + EntryPoint TessellationControl 4 "main" 16 18 31 41 ExecutionMode 4 OutputVertices 4 Source GLSL 450 SourceExtension "GL_NV_stereo_view_rendering" @@ -32,7 +31,7 @@ Validation failed MemberName 27(gl_PerVertex) 3 "gl_CullDistance" MemberName 27(gl_PerVertex) 4 "gl_SecondaryPositionNV" Name 31 "gl_in" - Name 37 "gl_Layer" + Name 41 "gl_Layer" MemberDecorate 12(gl_PerVertex) 0 BuiltIn SecondaryPositionNV MemberDecorate 12(gl_PerVertex) 1 BuiltIn SecondaryViewportMaskNV Decorate 12(gl_PerVertex) Block @@ -41,10 +40,11 @@ Validation failed MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance + MemberDecorate 27(gl_PerVertex) 4 BuiltIn SecondaryPositionNV Decorate 27(gl_PerVertex) Block - Decorate 37(gl_Layer) BuiltIn Layer - Decorate 37(gl_Layer) ViewportRelativeNV - Decorate 37(gl_Layer) SecondaryViewportRelativeNV 1 + Decorate 41(gl_Layer) BuiltIn Layer + Decorate 41(gl_Layer) ViewportRelativeNV + Decorate 41(gl_Layer) SecondaryViewportRelativeNV 1 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -71,8 +71,9 @@ Validation failed 30: TypePointer Input 29 31(gl_in): 30(ptr) Variable Input 32: TypePointer Input 7(fvec4) - 35: TypePointer Output 7(fvec4) - 37(gl_Layer): 22(ptr) Variable Output + 35: 8(int) Constant 4 + 39: TypePointer Output 7(fvec4) + 41(gl_Layer): 22(ptr) Variable Output 4(main): 2 Function None 3 5: Label 19: 8(int) Load 18(gl_InvocationID) @@ -81,7 +82,10 @@ Validation failed 24: 8(int) Load 18(gl_InvocationID) 33: 32(ptr) AccessChain 31(gl_in) 20 21 34: 7(fvec4) Load 33 - 36: 35(ptr) AccessChain 16(gl_out) 24 21 - Store 36 34 + 36: 32(ptr) AccessChain 31(gl_in) 20 35 + 37: 7(fvec4) Load 36 + 38: 7(fvec4) FAdd 34 37 + 40: 39(ptr) AccessChain 16(gl_out) 24 21 + Store 40 38 Return FunctionEnd diff --git a/Test/spv.multiviewPerViewAttributes.tesc b/Test/spv.multiviewPerViewAttributes.tesc index a0dd64df..117a1ad4 100644 --- a/Test/spv.multiviewPerViewAttributes.tesc +++ b/Test/spv.multiviewPerViewAttributes.tesc @@ -10,5 +10,5 @@ out gl_PerVertex { void main() { gl_out[gl_InvocationID].gl_ViewportMaskPerViewNV[0] = 1; - gl_out[gl_InvocationID].gl_PositionPerViewNV[0] = gl_in[1].gl_Position; + gl_out[gl_InvocationID].gl_PositionPerViewNV[0] = gl_in[1].gl_Position + gl_in[1].gl_PositionPerViewNV[0]; } diff --git a/Test/spv.stereoViewRendering.tesc b/Test/spv.stereoViewRendering.tesc index e8cfe003..ec1076f8 100644 --- a/Test/spv.stereoViewRendering.tesc +++ b/Test/spv.stereoViewRendering.tesc @@ -15,5 +15,5 @@ layout (viewport_relative, secondary_view_offset = 1) out highp int gl_Layer; void main() { gl_out[gl_InvocationID].gl_SecondaryViewportMaskNV[0] = 1; - gl_out[gl_InvocationID].gl_SecondaryPositionNV = gl_in[1].gl_Position; + gl_out[gl_InvocationID].gl_SecondaryPositionNV = gl_in[1].gl_Position + gl_in[1].gl_SecondaryPositionNV; } diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 602bf850..a229e302 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -8095,7 +8095,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable); BuiltInVariable("gl_ViewportMaskPerViewNV", EbvViewportMaskPerViewNV, symbolTable); - if (language != EShLangVertex) { + if (language == EShLangVertex || language == EShLangGeometry) { symbolTable.setVariableExtensions("gl_in", "gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering); symbolTable.setVariableExtensions("gl_in", "gl_PositionPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes); @@ -9770,6 +9770,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_in", "gl_TexCoord", EbvTexCoord, symbolTable); BuiltInVariable("gl_in", "gl_FogFragCoord", EbvFogFragCoord, symbolTable); +#ifdef NV_EXTENSIONS + symbolTable.setVariableExtensions("gl_in", "gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering); + symbolTable.setVariableExtensions("gl_in", "gl_PositionPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes); + + BuiltInVariable("gl_in", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable); + BuiltInVariable("gl_in", "gl_PositionPerViewNV", EbvPositionPerViewNV, symbolTable); +#endif + // extension requirements if (profile == EEsProfile) { symbolTable.setVariableExtensions("gl_in", "gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);